【问题标题】:Reading multiple CSV files and joining them horizontally读取多个 CSV 文件并水平连接它们
【发布时间】:2018-12-14 23:44:48
【问题描述】:

我有几个 csv 格式的文件,例如 100-age.csv 100-rel.csv 100-gender.csv 101-age.csv ... 101-gender.csv ... 482-rel.csv 482-gender.csv 等。我必须为每个索引创建新文件,即 100-combo.csv 它将加入 100-age.csv 100-rel.csv100-gender.csv 水平 .我可以使用 pandas 对一个文件执行此操作

import pandas as pd

age = pd.read_csv('100-age.csv', header=None)
gender = pd.read_csv('100-gender.csv', header=None)
rel = pd.read_csv('100-rel.csv', header=None)

combined = pd.concat([age, gender, rel], axis=1)

combined.to_csv('100-combo.csv', header=None, index=None)

使用 linux,有像 cat 这样的方法只能垂直添加,即相互堆叠,而 paste 命令会扰乱我在这些文件中的格式。

    def merged_data(i):   

        age = pd.read_csv(path+str(i)+'.pdf-age.csv', header=None, error_bad_lines=False)
        gender = pd.read_csv(path+str(i)+'.pdf-gender.csv', header=None, error_bad_lines=False)
        rel = pd.read_csv(path+str(i)+'.pdf-rel.csv', header=None, error_bad_lines=False)
        combined = pd.concat([age, gender, rel], axis=1)
        combined['block'] = str(i)
        combined.to_csv(path+str(i)+'-combo.csv', header=None, index=None)

for num in range(1,483):

    merged_data(num)

我收到了这个错误

EmptyDataError: No columns to parse from file

但是,我知道我所有的数据文件都有一些或其他值

【问题讨论】:

  • 我相信pandas中的代码是可以用的,但是对于多个文件我该怎么做,那个循环怎么写呢?
  • 你不知道如何连接字符串?
  • 我知道,但是在这种情况下我应该在哪里使用它?
  • "100-age.csv" 只是str(100) + "-age.csv",我相信您可以找到更适合您需求的range
  • 嗨@bobrobbob 我还需要在连接时创建一个列,该列将在所有行中具有索引号 i,代码是否相同?

标签: python regex linux pandas csv


【解决方案1】:

我做到了,得到了我想要的。我用过

import pandas as pd
import numpy as np
from pandas.io.common import EmptyDataError

    def merged_data(i):   
        try:
            age = pd.read_csv(path+str(i)+'.pdf-age.csv', header=None, error_bad_lines=False, delim_whitespace=True)
        except EmptyDataError:
            age = pd.DataFrame()
        try:  
            gender = pd.read_csv(path+str(i)+'.pdf-gender.csv', header=None, error_bad_lines=False, delim_whitespace=True)
        except EmptyDataError:
            gender = pd.DataFrame()
        try:
            rel = pd.read_csv(path+str(i)+'.pdf-rel.csv', header=None, error_bad_lines=False, delim_whitespace=True)
        except EmptyDataError:
            rel = pd.DataFrame()
            combined = pd.concat([age, gender, rel], axis=1)
            combined['block'] = str(i)
            combined.to_csv(path+str(i)+'-combo.csv', header=None, index=None)

for num in range(1,483):

    merged_data(num)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-28
    • 2017-02-15
    • 1970-01-01
    • 2017-08-02
    • 2013-06-21
    • 2020-07-28
    • 2022-09-23
    • 1970-01-01
    相关资源
    最近更新 更多