【问题标题】:Python - Combining Multiple CSV Files Renders Text Field as NumberPython - 组合多个 CSV 文件将文本字段呈现为数字
【发布时间】:2020-05-23 06:56:15
【问题描述】:

我有一个 Python 脚本来组合多个 CSV 文件。我在这里使用托管在 GitHub 存储库中的数据:https://github.com/statistikat/coronaDAT

脚本运行良好,并结合了多个 CSV 文件。但是,它采用第一列,即文本,并将其呈现为数字。

关于为什么合并的 CSV 将第一列从文本更改为数字的任何建议?

原始 CSV 文件:

合并的 CSV 文件:

这是我的 Python 脚本:


import glob

path = r'/Users/matt/test/' # use your path

all_files = glob.glob(path + "/*.csv")

li = []

for filename in all_files:

    df = pd.read_csv(filename, index_col=None, header=0)

    li.append(df)

frame = pd.concat(li, axis=0, ignore_index=True)
#export to csva
frame.to_csv( "combined_csv.csv", index=False, encoding='utf-8-sig')

【问题讨论】:

    标签: python csv


    【解决方案1】:

    您的代码不会将文本呈现为数字 - 它会忽略第一列中的值,因为您在连接期间指定了应该忽略它。然后它将所有列移动 1。

    如果你想查看城市名称,你应该省略参数ignore_index=True

    所以,而不是:

    frame = pd.concat(li, axis=0, ignore_index=True)
    

    应该有:

    frame = pd.concat(li, axis=0, ignore_index=False)
    

    或者干脆

    frame = pd.concat(li, axis=0)
    

    其次,当您创建生成的 CSV 文件时,您告诉它忽略索引 - 即使帧正确,您仍然会收到带有数字的第一列。 你应该改变:

    frame.to_csv( "combined_csv.csv", index=False, encoding='utf-8-sig')
    

    到:

    frame.to_csv( "combined_csv.csv", index=True, encoding='utf-8-sig')
    

    【讨论】:

    • 感谢您的建议。它按照建议做了。我还必须将分隔符指定为“;”使其正常工作,因为原始文件将 ;- 分隔的数据放在不同的列中。我将 pd.read_csv 行更改为 df = pd.read_csv(filename, delimiter=';', header=0, index_col=['Timestamp','GKZ'], parse_dates=['Timestamp'])
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-03-27
    • 1970-01-01
    • 2017-08-17
    • 2017-09-25
    • 1970-01-01
    • 2020-07-10
    • 2020-12-27
    相关资源
    最近更新 更多