附加两个csv文件时如何修复pandas concat

Posted

技术标签:

【中文标题】附加两个csv文件时如何修复pandas concat【英文标题】:How to fix pandas concat when appending of two csv files 【发布时间】:2019-09-08 17:46:40 【问题描述】:

我正在尝试将两个具有相同结构的 csv 文件合并到一个合并的 csv 文件中,但是当我这样做时,列会以不同的顺序重新排列,并且我的一个 csv 文件中缺少数据.

我已经检查了这两个文件以确保它们的列与一个和另一个一致,但是当我执行我的代码时,我的 csv 文件之一(变量 b)似乎缺少“社会护理 DTOC 床”列中的数据。执行代码后我也收到此消息:

“FutureWarning:排序,因为非连接轴未对齐。未来版本的 pandas 将默认更改为不排序。要接受未来的行为,请传递 'sort=True'。要保留当前的行为并使警告静音,通过sort=False"

a=pd.read_csv('https://www.england.nhs.uk/statistics/wp-content/uploads/sites/2/2019/04/MSitDT-FEBRUARY-2019-full-extract-for-publication-td5dtd.csv')

b = pd.read_csv('https://www.england.nhs.uk/statistics/wp-content/uploads/sites/2/2019/03/MSitDT-JANUARY-2019-full-extract-for-publication-5tsrt.csv')

out_put=pd.concat([a,b])

out_put.to_csv( "result.csv", encoding='utf-8-sig')

我期待一个 csv 文件,其中的组合行按相同的列顺序排列,并且没有任何数据丢失。

【问题讨论】:

【参考方案1】:

列标题之间存在大小写不匹配...例如。 "Social Care DTOC Beds"vs "Social Care DTOC beds" - 注意“beds”中的小写“b”。

简单的解决方法是使用str.title(或str.lower/str.upper,如果您愿意的话)规范化这些列标题:

a=pd.read_csv('https://www.england.nhs.uk/statistics/wp-content/uploads/sites/2/2019/04/MSitDT-FEBRUARY-2019-full-extract-for-publication-td5dtd.csv')

b = pd.read_csv('https://www.england.nhs.uk/statistics/wp-content/uploads/sites/2/2019/03/MSitDT-JANUARY-2019-full-extract-for-publication-5tsrt.csv')

a.columns = a.columns.str.title()
b.columns = b.columns.str.title()

out_put = pd.concat([a, b])[a.columns]

【讨论】:

感谢您的解决方案,是否有任何理由说明为什么要重新排列列,我理解丢失的数据,因为存在不匹配,但我无法理解列的重新排列。 不完全确定。如果 DataFrame 与 python dict 的工作方式相同,则默认情况下它们是无序的(如果 'columns' 分别等同于 'keys')。为保证订单得到维护,您可以使用out_put = pd.concat([a, b])[a.columns]

以上是关于附加两个csv文件时如何修复pandas concat的主要内容,如果未能解决你的问题,请参考以下文章

如何在通过 Pandas 在 csv 中写入多个 for 循环的数据时在单个单元格中附加数据?

使用 Pandas 附加 BigQuery 表时如何修复无效架构

如何在 Python 中使用 Pandas 数据结构附加多个 CSV 文件

使用 pandas 选择和附加一些数据

在追加模式下使用 to_csv 时,python pandas 新行附加到 csv 中的最后一行

如何使用 pandas 将新的数据帧行附加到 csv?