【问题标题】:Joining several csvs to create one large file. Some csvs have different columns names, how to handle?加入多个 csv 文件以创建一个大文件。一些csv有不同的列名,如何处理?
【发布时间】:2021-06-16 01:27:18
【问题描述】:

我有一堆 CSV 文件,它们想连接成一个大文件。

我注意到每个文件中的列并不是唯一的。少数列在列中包含“包”一词。我想用“pkg”替换“package”。

我使用 glob 方法提取了完整的 .csv 列表,然后使用 pd.concat 将数据组合在一起

data1.csv

data2.csv

grouped data result example:

package dimension   package height  package length  pkg dimensions  pkg height  pkg length
1                       10                4             6               11         9
2                       15                5             7               16         21
3                       30                6             8               31         7

数据应该是:

    pkg dimensions  pkg height  pkg length                          
    6                   11      9
    7                   16      21
    8                   31      7
    1                   10      4
    2                   15      5
    3                   30      6

我有一本包含所有正确列名的字典,例如:

df.rename(columns ={'package dimension' : 'pkg dimensions' etc})

而不是打开每个 excel 文件并将我想要的列重命名为列表理解。到目前为止,这是我得到的:

data = list of all excel file locations
i in range(len(data):
    df = pd.read_csv(fedex[i], index_col=0)
    df = df.rename(columns ={'package dimension' : 'pkg dimensions' etc}, inplace=True)
    df = pd.concat((pd.read_csv(i).assign(filename= os.path.basename(i)) for i in data), ignore_index = True)

我不知道如何重命名列并将它们正确放置。在我运行它之后它可以工作,但我最终得到了 91 列或 11 列。

【问题讨论】:

  • 您是否尝试剥离列值?看看创建了哪些额外的列。
  • 是的,所以这个文件每天都会被提取,我认为列名是一个错字。列名应该是 pkg 但输入的是包。因此,当我尝试连接所有 csvs 时,我得到了一个包含 package 和 pkg 列的数据框,我只想要 pkg 列。所以我的想法是一旦我更改了列名然后加入我就不会得到额外的列

标签: python pandas dataframe csv


【解决方案1】:

试试这个:

df = pd.DataFrame([], columns=['package dimension',  'package height',  'package length'])
df.columns = df.columns.str.replace('package','pkg')
print(df.columns)

输出:

Index(['pkg dimension', 'pkg height', 'pkg length'], dtype='object')

【讨论】:

  • 我试过了,它能够重命名列!但是当我执行 len(df.columns) 时,我仍然有 91 列,我应该有 80 列。
  • 我猜列名可能有一些不必要的东西,比如空格,所以重命名不起作用。您可以使用 list(set(df1.columns) - set(df2.columns)) 和 list(set(df2.columns) - set(df1.columns)) 检查两个数据框中哪些列名不同。
猜你喜欢
  • 2012-05-12
  • 1970-01-01
  • 2013-06-24
  • 2021-11-24
  • 1970-01-01
  • 2020-06-18
  • 1970-01-01
  • 2020-06-30
  • 2011-08-07
相关资源
最近更新 更多