匹配列并附加到数据框,Python 3.6

Posted

技术标签:

【中文标题】匹配列并附加到数据框,Python 3.6【英文标题】:Match columns and append to data frame, Python 3.6 【发布时间】:2018-02-15 01:32:58 【问题描述】:

我有大约 50 个 excel 文件,我想导入数据框并将所有文件合并到单个数据框中。 但是有些文件有 3 个,有些是 4 列。每个文件以不同的顺序作为不同的列。

所有文件的不同列总数:5,即 col1、col2、col3、col4、col5

我知道如何导入,但在附加面临的问题时。

脚本:

dfAll = pd.DataFrame(columns=['col1', 'col2', 'col3', 'col4', 'col5')]
df= pd.read_excel('FilePath', sheetname='data1') # contains 3 columns i.e col1, col2, col5
columnsOFdf = df.columns
dfAll[columnsOFdf] = dfAll.append(df)

但它给出的错误“ValueError: Columns must be same length as key”

我想将 df['col1','col2','col5'] 数据附加到 dfAll['col1','col2','col5'] >

请帮助解决这个问题。

【问题讨论】:

您正在尝试将大小为 3 的数据框附加到大小为 5 的数据框,这不适用于非类型数据集 @Sentinel,感谢您的回复,还有其他解决方案吗? 我在使用 python 的数据帧方面没有得到很好的参考,你很可能需要创建一个只包含你想要的列的新数据帧,而不是附加其他数据帧 【参考方案1】:

串联将匹配您的列

dfs = []
files = [...]
for file_name in files:
    dfs.append(pd.read_excel(file_name, sheetname='data1'))
df = pd.concat(dfs)

df1 = pd.DataFrame(np.random.randn(3, 3), columns=list('ABC'))
df2 = pd.DataFrame(np.random.randn(3, 3), columns=list('BCD'))
>>> pd.concat([df1, df2])
          A         B         C         D
0 -2.329280  0.644155 -0.835137       NaN
1  0.666496 -1.299048  0.111579       NaN
2  1.855494 -0.085850 -0.541890       NaN
0       NaN -1.131514  1.023610 -0.514384
1       NaN  0.670063  1.403143 -0.978611
2       NaN -0.314741 -0.727200 -0.620511

此外,每次将数据框附加到现有数据框时,它都会返回一个副本。这将严重降低性能,称为二次复制。您最好创建所有数据帧的列表,然后将结果连接起来。

【讨论】:

【参考方案2】:

一种解决方案是向从 Excel 文件加载的数据框添加空列:

columns = ['col1', 'col2', 'col3', 'col4', 'col5']
dfAll = pd.DataFrame(columns=columns)
df= pd.read_excel('FilePath', sheetname='data1') # contains 3 columns i.e             col1, col2, col5
columnsOFdf = df.columns
for column in columns:
    if column not in columnsOFdf:
        df[column] = [""] * df.shape[0]
dfAll.append(df)

【讨论】:

如果您需要使用新数据保留额外的列,这是一个很好的解决方法。也许一个占位符而不是一个空白空间将是一个好主意。但如果不需要数据,我建议创建一个新的数据框【参考方案3】:

试试这个:

[dfAll.append(i) for i in df]

希望对你有所帮助。

【讨论】:

错误:TypeError:无法连接非 NDFrame 对象 type(dfAll) >> , type(df) >>

以上是关于匹配列并附加到数据框,Python 3.6的主要内容,如果未能解决你的问题,请参考以下文章

Python:比较两个excel表之间的列字符串并找到匹配的列并写入另一个数据框

通过匹配部分索引标签添加索引列并重新索引数据框

如何将 Python 字典附加到 Pandas DataFrame,将键与列名匹配

遍历数据框中的列并在同一张图上绘图(Python)

如何遍历列并检查该值是不是与下一个值匹配然后追加?

Pandas - 匹配来自两个数据帧的两列并在 df1 中创建新列