gpt4 book ai didi

python - 删除特定列pandas

转载 作者:太空宇宙 更新时间:2023-11-03 21:06:30 33 4
gpt4 key购买 nike

我有以下代码:

dfs = glob.glob(path + "/*.csv") 
df = pd.concat([pd.read_csv(df) for df in dfs], axis=1, ignore_index=False)
df1 = df.loc[:,~df.columns.duplicated()]
df1.to_csv("userpath.csv")

此代码的目的是从同一数据库中获取随机/多个 csv 文件,并将它们彼此合并在一起。这些文件都具有相同的行和不同的列名称,但第一行具有相同的代码。例如,一个 csv 文件将包含 J1_01,J1_02,J2_01,J2_02.....,然后它将与另一个合并的 csv 文件 J1_01,J1_02,J2_01,J2_02,J3_01 重复。 ... 所有 csv 文件都有不同的列。第二行提供列值的标题描述。每个 csv 文件都有三列,提供行名称和行 ID 号的描述,例如:Id、Id2、标签名称。我想保留这三个实例中的第一个实例并删除其余的重复项。然而,我使用了代码 df.loc[:,~df.columns.duplicated()] ,因为 J1_01,J1_02,J2_01,J2_02,J3_01....当新的 csv 文件合并时,最终会重复,我会丢失一些列。有没有办法指定 df.loc[:,~df.columns.duplicated()] 代码以删除三个特定的重复项 Id、Id2、Label Name保留前三个之后?谢谢!作为一个后续问题,如果有人愿意提供帮助,如果我想用下划线替换每列中存在的特定字符(“:”,“;”或空格),有什么方法可以用 pandas 做到这一点?再次感谢!

Edit: Here's a screenshot of the merged csv file.

我想保留“GEO.id”、“GEO.id2”和“Geo.displ”的第一个实例,并在这三列重复时将其删除。

最佳答案

从您的图像看来,您要保留的列是以 GEO 开头的列。为此,您可以使用regex来匹配名称,然后获取这些列的索引,然后根据列索引拼接数据帧。

import re

pattern = r'GEO' # or just "id" or whatever pattern best matches your data

# Returns list of indices that match your pattern
match_idx = [i for i, e in enumerate(df.columns) if re.search(pattern, e)]

# Select all but the first two columns (since you want to keep those)
drop_cols = match_idx[2:]

# Now choose all columns that don't match the indices of the columns you're dropping
usecols = [idx for idx, e in enumerate(df.columns) if idx not in drop_cols]

# Then select your data
df1 = df.iloc[:, usecols]

注意:如果您尝试选择像 df['GEO.id'] 这样的单个列,它将返回所有名为 GEO.id 的列,即为什么我们必须按索引而不是按名称删除列。

关于python - 删除特定列pandas,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55364790/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com