Python:导入包含重复列名的csv文件

jutyujz0  于 12个月前  发布在  Python
关注(0)|答案(3)|浏览(83)

我正在尝试通过www.example.com _csv导入一个文件pd.read。这也很好用。只有我有这样的问题,即在源文件中有几个同名的列:
Row A, Row B, Row B, Row C
但是,在导入过程中只考虑第一列。相应的DataFrame看起来像这样:
Row A, Row B, Row C
我需要一个解决方案,进口所有黑桃,但重命名他们,如果必要的。比如说
Row A, Row B_1, Row B_2, Row C
我现在使用以下代码:

df = pd.read_csv('new.csv', header = 0, usecols = ["Row A", "Row B", "Row B", "Row C"], sep = ',')

在原始文件中重命名列的功能并不实用。这是因为列B可以根据您的需要经常出现。
我也试

df = pd.read_csv('new.csv', header = 0, usecols = ["Row A", "Row B", "Row B", "Row C"], sep = ',')

但结果还是一样。
先谢谢你。奥利弗

r6vfmomb

r6vfmomb1#

您可以首先将CSV读取为文本,修改标题行以使每个列名唯一,然后将其读入DataFrame。

with open('data.csv', 'r') as f:
    lines = f.readlines()

header = lines[0].strip().split(',')

col_count = {}
new_header = []

for col in header:
    if col in col_count:
        col_count[col] += 1
        new_col = f"{col}_{col_count[col]}"
    else:
        col_count[col] = 1
        new_col = col
    new_header.append(new_col)

lines[0] = ','.join(new_header) + '\n'

with open('modified_data.csv', 'w') as f:
    f.writelines(lines)

df = pd.read_csv('modified_data.csv')
rks48beu

rks48beu2#

column2 = df['Row B'] column3 = df['Row B.1']

l2osamch

l2osamch3#

非常感谢.我学到了很多,也发现了另一种可能性,我在我的程序中实现了:我导入了除“B”列以外的所有列。然后我使用lambda函数导入所有“B”列,最后我合并了两者:

df = pd.read_csv('new.csv', header = 0, usecols = ["A", "C"], sep = ',')
df_1 = pd.read_csv('new.csv', header = 0, usecols = lambda x: x.startswith("B") | x.startswith("A"), sep = ',')
df = df.merge(left_on = "A", right_on = "A", right = df_1, how = "left")

相关问题