【问题标题】:How to fix pandas concat when appending of two csv files附加两个csv文件时如何修复pandas concat
【发布时间】: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 文件,其中的组合行按相同的列顺序排列,并且没有任何数据丢失。

【问题讨论】:

    标签: python pandas csv concat


    【解决方案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]
    猜你喜欢
    • 2013-11-25
    • 1970-01-01
    • 2019-10-20
    • 2018-05-24
    • 2016-06-07
    • 1970-01-01
    • 2013-11-25
    • 2016-06-27
    • 1970-01-01
    相关资源
    最近更新 更多