附加两个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 文件