Импорт нескольких файлов CSV в панды и объединить их в один DataFrame - PullRequest
1 голос
/ 07 октября 2019

I имеет несколько CSV-файлов (каждый файл содержит N номеров строк (например, 1000 строк) и 43 столбца) .

Я хотел бы прочитать несколько CSV-файлов из папки в панды и объединить их в один DataFrame.

Я не смог понять это.

Проблема заключается в том, что окончательный вывод DataFrame (т. Е. frame = pd.concat(li, axis=0, ignore_index=True)) объединяет все столбцы (т. Е. 43 столбца ) в один столбец (см. прикрепленное изображение) Снимок экрана с кодом

пример выбранных строк и столбцов (файл один)

               Client_ID    Client_Name  Pointer_of_Bins   Date        Weight
                C0000001       POLYGONE      TI006093     12/03/2019   0.5
                C0000001       POLYGONE      TI006093     12/03/2019   0.6
                C0000001       POLYGONE      TI006093     12/03/2019   1.4
                C0000001       POLYGONE      TI006897     14/03/2019   2.9

пример выбранногостроки и столбцы (файл два) Client_ID Client_Name Pointer_of_Bins Дата Вес C0000001 POLYGONE TI006093 22/04/2019 1,5 C0000001 ALDI TI006098 22/04/2019 0,7 C0000001 ALDI TI006098 22/04/2019 2,4 C0000001 ALDI TI006898 24/04/2019 1.4*

Ожидаемые результаты будут выглядеть следующим образом (объединение нескольких файлов, которые могут содержать тысячи строк и несколько столбцов, поскольку прикрепленные данные являются лишь примером, тогда как фактические файлы CSV могут содержать тысячи строк и более 45 столбцовв каждом файле)

               Client_ID    Client_Name  Pointer_of_Bins   Date        Weight
                C0000001       POLYGONE      TI006093     12/03/2019   0.5
                C0000001       POLYGONE      TI006093     12/03/2019   0.6
                C0000001       POLYGONE      TI006093     12/03/2019   1.4
                C0000001       POLYGONE      TI006897     14/03/2019   2.9   
                C0000001       POLYGONE      TI006093     22/04/2019   1.5
                C0000001       ALDI          TI006098     22/04/2019   0.7
                C0000001       ALDI          TI006098     22/04/2019   2.4
                C0000001       ALDI          TI006898     24/04/2019   1.9                                                             

TO Чтобы загрузить два файла CSV, нажмите здесь (фиктивные данные

Вот что я сделал до сих пор:

import pandas as pd
import glob
path = r'C:\Users\alnaffakh\Desktop\doc\Data\data2\Test'
all_files = glob.glob(path + "/*.csv")
li = []
for filename in all_files:
    df = pd.read_csv(filename, sep='delimiter', index_col=None, header=0)
  # df = pd.read_csv(filename, sep='\t', index_col=None, header=0)
    li.append(df)
frame = pd.concat(li, axis=0, ignore_index=True)

1 Ответ

0 голосов
/ 07 октября 2019

Решение

Вы можете использовать pandas.concat для рекурсивного объединения содержимого файла .csv.
На самом деле, я вижу, что вы использовали его и ваше приложениеиз concat кажется нормальным для меня. Попробуйте исследовать отдельные кадры данных, которые вы прочитали. Единственный способ объединить ваши столбцы в один столбец, если вы не упомянули правильный разделитель.

import pandas as pd

dfs = list()
for filename in filesnames:    
    df = pd.read_csv(filename)    
    dfs.append(df)
frame = pd.concat(dfs, axis=0, ignore_index=True)
df.head()

Пример с фиктивными данными

Поскольку доступные фиктивные данные еще не в текстовом формате, я использую только некоторые фиктивные данные, которые я сделал.

import pandas as pd
from io import StringIO # needed for string to dataframe conversion

file1 = """
Col1    Col2    Col3    Col4    Col5
1   ABCDE   AE10    CD11    BC101F
2   GHJKL   GL20    JK22    HJ202M
3   MNPKU   MU30    PK33    NP303V
4   OPGHD   OD40    GH44    PG404E
5   BHZKL   BL50    ZK55    HZ505M
"""

file2 = """
Col1    Col2    Col3    Col4    Col5
1   AZYDE   AE10    CD11    BC100F
2   GUFKL   GL24    JK22    HJ207M
3   MHPRU   MU77    PK39    NP309V
4   OPGBB   OE90    GH41    PG405N
5   BHTGK   BL70    ZK53    HZ508Z
"""

Загрузите данные как отдельные кадры данных, а затем объедините их.

df1 = pd.read_csv(StringIO(file1), sep='\t')
df2 = pd.read_csv(StringIO(file2), sep='\t')
print(pd.concat([df1, df2], ignore_index=True))

Выход :

   Col1   Col2  Col3  Col4    Col5
0     1  ABCDE  AE10  CD11  BC101F
1     2  GHJKL  GL20  JK22  HJ202M
2     3  MNPKU  MU30  PK33  NP303V
3     4  OPGHD  OD40  GH44  PG404E
4     5  BHZKL  BL50  ZK55  HZ505M
5     1  AZYDE  AE10  CD11  BC100F
6     2  GUFKL  GL24  JK22  HJ207M
7     3  MHPRU  MU77  PK39  NP309V
8     4  OPGBB  OE90  GH41  PG405N
9     5  BHTGK  BL70  ZK53  HZ508Z
...