删除特定的列熊猫

观看直播

我有以下代码:

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, Label Name我要保留这三个的第一个实例,并删除其余重复项。我使用了代码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在保留前三个重复项之后只删除三个特定的重复项?谢谢!作为后续问题,是否有人愿意提供帮助,如果我想用下划线替换每个列(“:”,“;”或空格)中存在的特定字符,是否可以用熊猫来做到这一点?再次感谢!

编辑:这是合并的csv文件的屏幕截图。

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

HS星云

从您的图像看来,您要保留的列似乎是以开头的列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,这就是为什么我们必须按索引而不是名称删除列的原因。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章