2016-08-14 12 views
1

Я пытаюсь добавить значения фрейма данных в виде строк, но добавляет их в виде столбцов. У меня есть 32 файла, которые я бы хотел взять из второго столбца (называемый dataset_code) и добавить его. Но он создает 32 строки и 101 столбца. Мне хотелось бы 1 столбец и 3232 строки.Python Pandas Dataframe Append Rows

import pandas as pd 
import os 



source_directory = r'file_path' 

df_combined = pd.DataFrame(columns=["dataset_code"]) 

for file in os.listdir(source_directory): 
    if file.endswith(".csv"): 
      #Read the new CSV to a dataframe. 
      df = pd.read_csv(source_directory + '\\' + file) 
      df = df["dataset_code"] 
      df_combined=df_combined.append(df) 



print(df_combined) 
+1

Вы уверены, что столбцы одинаковы? из 'append' [docs] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.append.html):« Добавить строки другого в конец этого фрейма, возвращая новый объект. Столбцы, не входящие в этот кадр, добавляются как новые столбцы ». – DeepSpace

+0

Да, когда я подмножество df и распечатаю его, он печатает соответствующий столбец – PyNoob

ответ

6

У вас уже есть два совершенно хорошие ответы, но позвольте мне сделать пару рекомендаций.

  1. Если вы хотите только dataset_code колонки, скажите pd.read_csv непосредственно (usecols=['dataset_code']) вместо загрузки всего файла в память только немедленно подмножество в dataframe.
  2. Вместо добавления к исходному пустому фрейму, собирайте список данных и объединяйте их одним махом в конце. Добавление строк в pandas DataFrame дорого (необходимо создать совершенно новый), поэтому ваш подход создает 65 DataFrame s: один в начале, один при чтении каждого файла, один при добавлении каждого из последних —, возможно, еще 32 , с подмножеством. Подход, который я предлагаю, создает только 33 из них и является общей идиомой для такого импорта.

Вот код:

import os 
import pandas as pd 

source_directory = r'file_path' 

dfs = [] 
for file in os.listdir(source_directory): 
    if file.endswith(".csv"): 
     df = pd.read_csv(os.join.path(source_directory, file), 
         usecols=['dataset_code']) 
     dfs.append(df) 

df_combined = pd.concat(dfs) 
+0

Спасибо Альберто, я поменял ваш на принятый ответ, потому что это лучшее решение – PyNoob

4

df["dataset_code"] является Series, не DataFrame. Поскольку вы хотите добавить один DataFrame в другой, вам нужно изменить объект Series на объект DataFrame.

>>> type(df) 
<class 'pandas.core.frame.DataFrame'> 
>>> type(df['dataset_code']) 
<class 'pandas.core.series.Series'> 

Чтобы сделать преобразование, сделать это:

df = df["dataset_code"].to_frame() 
+0

эй Nehal, это сработало, спасибо! Но почему это сработало? Вы можете мне помочь? – PyNoob

+0

@PyNoob Я обновил ответ. –

3

В качестве альтернативы, вы можете создать dataframe с двойными квадратными скобками:

df = df[["dataset_code"]] 
+0

Nice, спасибо Parfait – PyNoob