将CSV中的重复列名拆分到新行中,保持第一列不变

k3fezbri  于 2023-01-18  发布在  其他
关注(0)|答案(1)|浏览(134)

我有一个包含多个相同列名的CSV,我希望将它们拆分为各自的行,同时保持“id”字段不变。本质上,本应属于各自行的内容被放在了行的末尾。
我很难用语言表达出来,所以下面的例子应该能把事情弄清楚。你可以看到“road_name”、“length”和“type”被重复了好几次。

输入:

id,road_name,length,type,road_name,length,type,road_name,length,type,road_name,length,type
1,r22,22,c,r16,16,a,r17,13,a,r77,13,c
2,r16,5,c,,,,,,,,,
3,r12,7,a,r9,12,c,r3,5,c,,,

预期输出:

id,road_name,length,type
1,r22,22,c
1,r16,16,a
1,r17,13,a
1,r77,13,c
2,r16,5,c
3,r12,7,a
3,r9,12,c
3,r3,5,c

如果能被指出正确的方向那就太好了。我无法用语言表达这个问题,这让我很难搜索相关的相关例子。

wecizke3

wecizke31#

此变通方案将按您的需要组织数据。并且您可以将其另存为新的csv文件。

df = pd.read_csv("your_file.csv")

num_cols = df.shape[1]
df_out = pd.DataFrame(columns=["id", "road_name", "length", "type"])

for i in range(len(df)):
    id_ = df.iloc[i]["id"]
    for j in range(1, num_cols - 2, 3):
        rn = df.iloc[i][j]
        le = df.iloc[i][j+1]
        ty = df.iloc[i][j+2]
        if rn != "":
            df_out = pd.concat([df_out, pd.DataFrame({"id": [id_], "road_name": [rn], "length": [le], "type": [ty]})], ignore_index=True)

df_out.dropna(inplace=True)
df_out.reset_index(drop=True, inplace=True)

df_out.to_csv("organized.csv", index=False)
print(df_out)
id road_name length type
0  1       r22     22    c
1  1       r16     16    a
2  1       r17     13    a
3  1       r77     13    c
4  2       r16      5    c
5  3       r12      7    a
6  3        r9     12    c
7  3        r3      5    c

相关问题