使用熊猫分割csv时修复重复的行

时间:2020-03-11 23:09:57

标签: python pandas dataframe

我是Python的新手,在搜索时找不到我真正需要的东西。我尝试使用.merge尝试一堆随机的东西,并放下重复项,但没有任何效果。

我有一个文件,该文件具有一个Images列,该列可以具有任意数量的以逗号分隔的链接。我的目标是为Images下的每个索引创建带有标题的单独列。这是我到目前为止所拥有的:

input.csv

Dealer  Stock#  VIN                 Images      
123      456    1HGCM72624A009649   site.com/001.jpg,site.com/002.jpg,site.com/-003.jpg
123      789    JTHCL5EF9F5072453   site.com/100.jpg,site.com/102.jpg   

当我使用以下代码时,在代码下面获得了output.csv文件。

代码

 df = pd.read_csv("input_file.csv", index_col=0, sep='\t', encoding='windows-1252')

 df2 = df['Images'].str.split(',',expand=True)    
 df2.columns = ['Images{}'.format(x+1) for x in df2.columns]

 df = df.join(df2)
 df = df.drop(['Images'], axis=1)

 df.to_csv('output_file.csv')
 print ("The file 'output_file.csv' was created.")

output.csv

Dealer  Stock#  VIN                 Images1           Images2            Images3
123      456    1HGCM72624A009649   site.com/001jpg   site.com/002.jpg   site.com/-003.jpg
123      456    1HGCM72624A009649   site.com/100.jpg  site.com/102.jpg  
123      789    JTHCL5EF9F5072453   site.com/001.jpg  site.com/002.jpg   site.com/-003.jpg
123      789    JTHCL5EF9F5072453   site.com/100.jpg  site.com/102.jpg  

我真的希望我的文件如下所示,但我不确定从这里开始。感谢您的提前帮助!

Dealer  Stock#  VIN                 Images1           Images2            Images3
123      456    1HGCM72624A009649   site.com/001jpg   site.com/002.jpg   site.com/-003.jpg
123      789    JTHCL5EF9F5072453   site.com/100.jpg  site.com/102.jpg  

2 个答案:

答案 0 :(得分:0)

df = pd.concat([df,df['Images'].str.split(',',expand=True)], axis=1)
df.columns = ['Dealer','Stock#','VIN','Images','Images1','Images2','Images3']
df.drop(columns=['Images'], inplace=True)

答案 1 :(得分:0)

建立Chris ...

df_new = pd.concat([df[['Dealer', 'Stock#', 'VIN']],
                df['Images'].str.split(',',expand=True).rename(columns = lambda x: 
                f"Images{(x+1)}")],
               axis=1).fillna('')
df_new

或将索引合并到索引

df_new = pd.merge(df[['Dealer', 'Stock#', 'VIN']],
              df['Images'].str.split(',', expand=True).rename(columns = lambda x: f"Images{(x+1)}"),
              how='left',
              left_index=True,
              right_index=True).fillna('')
df_new