在多个分隔符上拆分CSV文件,然后检测重复的行

时间:2018-04-19 18:09:46

标签: python pandas csv

我正在阅读panda的csv文件。我需要根据给定列中的字符串数量复制行(可能是多个)。例如,使用col1和separator" |":
in_csv:
col1,col2,col3
ABC | EFG,1,a ABC | EFG,1,bb
ABC | EFG,2,c

out_csv:
col1,col2,col3
ABC,1,a EFG,1,a ABC,1,bb
EFG,1,bb
ABC,2,c
EFG,2,c

我尝试使用incsv_dt.row1.iloc [ii] .split(' |')逐行读取循环,但我相信应该有一种更简单的方法。 col1中的字符串由|分隔可能是多个

由于

2 个答案:

答案 0 :(得分:0)

未排序,如果有没有“|”的条目可能无效在第一列。根据'col1'创建两个数据帧,然后将它们一起添加。如果col1中有多个'|',也可能无效。

df = pd.DataFrame()
df['col1'] = ['APC|EFG', 'APC|EFG','APC|EFG']
df['col2'] = [1,1,2]
df['col3'] = ['a','bb','c']

# split into two columns based on '|' delimiter
df = pd.concat([df, df['col1'].str.split('|', expand = True)], axis=1)

# create two dataframes with new labels
df2 = df.drop(['col1',1], axis=1)
df2.rename(columns={0: 'col1'}, inplace=True)
df3 = df.drop(['col1',0], axis=1)
df3.rename(columns={1: 'col1'}, inplace=True)

# append them together
df = df2.append(df3)

答案 1 :(得分:0)

示例设置:

df = pd.DataFrame()
df['col1'] = ['APC|EFG', 'APC', 'APC|EFG|XXX']
df['col2'] = [1, 1, 2]
df['col3'] = ['a', 'bb', 'c']

您可以首先使用拆分的列创建一个新的数据框。 然后删除空值。如果某些值具有 多次拆分,有些没有。

dfs = df['col1'].str.split('|', 
        expand = True).unstack().reset_index().set_index('level_1')[0].dropna().to_frame()

要将其与原始数据帧合并,请确保索引相同。 当我尝试时,原始数据框具有RangeIndex,因此我将其转换为 整数

df.index = list(df.index)

然后,您可以合并索引上的数据框,并将新列重命名为'col1'

df_result = pd.merge(dfs,
         dfx[['col2', 'col3']], 
         left_index=True, right_index=True, 
         how='outer').rename(columns={0: 'col1'})

print(df_result)

结果

  col1  col2 col3
0  APC     1    a
0  EFG     1    a
1  APC     1   bb
2  APC     2    c
2  EFG     2    c
2  XXX     2    c