Я пытаюсь объединить несколько файлов .txt в каталог, специально сливающийся в один из общих столбцов X, найденных в кадрах данных.

Импортируйте несколько CSV-файлов в панды и объединяйте их в один DataFrame

Python панды - объединить CSV-файлы в каталоге в один

Импорт нескольких вложенных CSV-файлов и объединение в один DataFrame

Python для объединения нескольких файлов из каталога в один файл

Лучшая стратегия для объединения множества фреймов данных с использованием панд

import pandas as pd

  df1 = pd.DataFrame({'X': ['X0', 'X1', 'X2', 'X3'],
       ...:                     'B': ['B0', 'B1', 'B2', 'B3'],
       ...:                     'C': ['C0', 'C1', 'C2', 'C3'],
       ...:                     'D': ['D0', 'D1', 'D2', 'D3']})


df2 = pd.DataFrame({'X': ['X0', 'X1', 'X2', 'X3'],
   ...:                     'G': ['G0', 'G1', 'G2', 'G3'],
   ...:                     'H': ['H0', 'H1', 'H2', 'H3'],
   ...:                     'J': ['J0', 'J1', 'J2', 'J3']})

Следуя предыдущим пост-решениям, я построил следующий код

filepath = "D:\\test"

data=[]
for file in glob.iglob(filepath + '/*.txt', recursive=True):

    print(file)

    df=pd.read_csv(file, header=0, skiprows=0, skipfooter=0, na_values=(""," ","NA"))
    data=data.append(df)

data_merge = pd.concat(data, keys = ('X'))    

Но я получил

AttributeError: у объекта NoneType нет атрибута append

Как я могу объединить два кадра данных по общему столбцу?

Ожидаемый результат

enter image description here

enter image description here

Спасибо.

0
Alexander 5 Фев 2020 в 18:46

2 ответа

Лучший ответ

Заменить линию

data=data.append(df)

С участием

data.append(df.set_index('X'))

Это установит столбец X в качестве индекса и добавит их в массив данных. Тогда вам нужно будет изменить строку слияния на

data_merge = pd.concat(data, axis=1).reset_index()

Это приведет к

print(data_merge.mark_down())

|    | X   | B   | C   | D   | G   | H   | J   |
|---:|:----|:----|:----|:----|:----|:----|:----|
|  0 | X0  | B0  | C0  | D0  | G0  | H0  | J0  |
|  1 | X1  | B1  | C1  | D1  | G1  | H1  | J1  |
|  2 | X2  | B2  | C2  | D2  | G2  | H2  | J2  |
|  3 | X3  | B3  | C3  | D3  | G3  | H3  | J3  |

1
divingTobi 5 Фев 2020 в 16:30

Заменить эту строку:

data=data.append(df)

С этим:

data.append(df)

В отличие от использования append с пандами (т.е. df = df.append(dict1)), при использовании метода append в списке вам не нужно переопределять его

1
OD1995 5 Фев 2020 в 15:49