【问题标题】:merge 2 csv files by columns error related to strings?按与字符串相关的列错误合并 2 个 csv 文件?
【发布时间】:2021-07-13 05:52:15
【问题描述】:

我正在尝试按列合并 2 个 csv 文件。
我的两个 csv 都以 '_4.csv' 作为文件名结尾,合并后的 csv 的最终结果如下所示:

    0-10       ,83.72,66.76,86.98  ,0-10       ,83.72,66.76,86.98
    11-20      ,15.01,31.12,12.04  ,11-20      ,15.01,31.12,12.04
    21-30      ,1.14,2.05,0.94     ,21-30      ,1.14,2.05,0.94
    31-40      ,0.13,0.07,0.03     ,31-40      ,0.13,0.07,0.03
    over 40    ,0.0,0.0,0.0        ,over 40    ,0.0,0.0,0.0
    UHF case   ,0.0,0.0,0.0        ,UHF case   ,0.0,0.0,0.0

我的代码:

    #combine 2 csv into 1 by columns
    files_in_dir = [f for f in os.listdir(os.getcwd()) if f.endswith('_4.csv')]
    temp_data = []
    for filenames in files_in_dir:
        temp_data.append(np.loadtxt(filenames,dtype='str'))
    temp_data = np.array(temp_data)
    np.savetxt('_mix.csv',temp_data.transpose(),fmt='%s',delimiter=',')

但是错误提示:

    temp_data.append(np.loadtxt(filenames,dtype='str'))
    for x in read_data(_loadtxt_chunksize):
    raise ValueError("Wrong number of columns at line %d"
    ValueError: Wrong number of columns at line 2

不确定它是否与第一列是字符串而不是值有关。
有谁知道如何修理它?非常感谢

【问题讨论】:

  • 你有一个共同的主键来合并两个数据框吗?
  • 我不这么认为,我只想将 2 个 csv 与所有列合并,我编辑我的问题
  • 我认为我的第一个答案不太正确,我对其进行了大量编辑并将数据包含在问题中。让我知道这是否更接近问题的意图。
  • @chenabien,如果以下答案之一解决了您的问题,您应该接受它(单击相应答案旁边的复选标记)。这有两件事。它让每个人都知道您的问题已得到您满意的解决,并为帮助您的人提供帮助。 See here 以获得完整的解释。

标签: python pandas csv


【解决方案1】:

我认为您正在寻找join 方法。如果我们有两个.csv 格式的文件:

0-10       ,83.72,66.76,86.98
11-20      ,15.01,31.12,12.04
21-30      ,1.14,2.05,0.94
31-40      ,0.13,0.07,0.03
over 40    ,0.0,0.0,0.0
UHF case   ,0.0,0.0,0.0

假设它们都具有相似的结构,我们将使用其中一个名为 data.csv:

import pandas as pd

# Assumes there are no headers
df1 = pd.read_csv("data.csv", header=None)
df2 = pd.read_csv("data.csv", header=None)

# By default: DataFrame headers are assigned numbers 0, 1, 2, 3
# In the second data frame, we will rename columns so they do not clash.
#   meaning `df2` will now have columns named: 4, 5, 6, 7
df2 = df2.rename(
    columns={
        x: y for x, y in zip(df1.columns, range(len(df2.columns), len(df2.columns) * 2))
    }
)

print(df1.join(df2))

示例输出:

             0      1      2      3            4      5      6      7
0  0-10         83.72  66.76  86.98  0-10         83.72  66.76  86.98
1  11-20        15.01  31.12  12.04  11-20        15.01  31.12  12.04
2  21-30         1.14   2.05   0.94  21-30         1.14   2.05   0.94
3  31-40         0.13   0.07   0.03  31-40         0.13   0.07   0.03
4  over 40       0.00   0.00   0.00  over 40       0.00   0.00   0.00
5  UHF case      0.00   0.00   0.00  UHF case      0.00   0.00   0.00

【讨论】:

    猜你喜欢
    • 2020-05-11
    • 2018-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-16
    • 1970-01-01
    • 2021-12-07
    相关资源
    最近更新 更多