Подтвердить что ты не робот

Почему порядок столбцов изменяется при добавлении pandas данных?

Я хочу добавить (слить) все файлы csv в папку с помощью Python pandas.

Например: папка Say имеет два файла csv test1.csv и test2.csv следующим образом:

A_Id    P_Id    CN1         CN2         CN3
AAA     111     702         709         740
BBB     222     1727        1734        1778

и

A_Id    P_Id    CN1         CN2         CN3
CCC     333     710        750          750
DDD     444     180        734          778

Итак, питон script, который я написал, был следующим:

#!/usr/bin/python
import pandas as pd
import glob

all_data = pd.DataFrame()
for f in glob.glob("testfolder/*.csv"):
    df = pd.read_csv(f)
    all_data = all_data.append(df)

all_data.to_csv('testfolder/combined.csv')

Несмотря на то, что combined.csv имеет все добавленные строки, он выглядит следующим образом:

      CN1       CN2         CN3    A_Id    P_Id
  0   710      750         750     CCC     333
  1   180       734         778     DDD     444     
  0   702       709         740     AAA     111
  1  1727       1734        1778    BBB     222

Где это должно выглядеть так:

A_ID   P_Id   CN1    CN2    CN2
AAA    111    702    709    740
BBB    222    1727   1734   1778
CCC    333    110    356    123
DDD    444    220    256    223
  • Почему первые два столбца переместились в конец?
  • Почему он добавляется в первую строку, а не в последнюю строку?

Что мне не хватает? И как я могу получить получение 0s и 1s в первом столбце?

P.S: Поскольку это большие файлы csv, я думал об использовании pandas.

4b9b3361

Ответ 1

Я изменил код, как показано ниже. Комментарии в строке.

#!/usr/bin/python
import pandas as pd
import glob

# Grab all the csv files in the folder to a list.
fileList = glob.glob('input_folder/*.csv')

#Initialize an empty dataframe to grab the csv content.
all_data = pd.DataFrame()

#Initialize an empty list to grab the dataframes.
dfList= []

for files in  fileList:
    df =  pd.read_csv(files, index_col = None, header= False)
    dfList.append(df)

#The frames will be in reverse order i.e last read file content in the begining. So reverse it again
Reversed_dfList =  dfList[::-1]
CombinedFrame =  pd.concat(Reversed_dfList)

# The "Combined.csv" file will have combination of all the files.
CombinedFrame.to_csv('output_folder/Combined.csv', index=False)

Ответ 2

Попробуйте это.....

all_data = all_data.append(df)[df.columns.tolist()]

Ответ 3

У меня была такая же проблема, и это было больно. Мне удалось решить эту проблему путем реорганизации столбцов на основе исходного фрейма после того, как он был добавлен в конечный файл данных. Это будет выглядеть так:

#!/usr/bin/python
import pandas as pd
import glob

all_data = pd.DataFrame()
for f in glob.glob("testfolder/*.csv"):
    df = pd.read_csv(f)
    all_data = all_data.append(df)
    all_data = all_data[df.columns]

all_data.to_csv('testfolder/combined.csv') 

Так как ваш вопрос был почти два года назад, я отправляю решение, которое работало для меня для других, кто также столкнется с подобной проблемой.

Ответ 5

Начиная с версии 0.23.0, вы можете запретить методу append() сортировать окончательно добавленный DataFrame. В твоем случае:

all_data = all_data.append(df, sort=False)