【问题标题】:Pandas split cell by delimiter to new rowsPandas 通过分隔符将单元格拆分为新行
【发布时间】:2021-10-14 21:04:32
【问题描述】:

我有很多行如下图所示。我正在尝试为非常长的“区域”列中的每个值创建一个新行。每个新行都会复制前三列的数据,并在列中保留下一个“区域”值。

row example

Desired output

我相信 pandas 中的 explode 方法是我所需要的,但我的数据并没有以我期望的方式从列表中脱颖而出。

#Constants and Public Variables
df = pd.read_excel("input.xlsx", sheet_name=0, usecols='D,G,H,K')
df = df.dropna()
new_header = df.iloc[0] #grab the first row for the header
df = df[1:] #take the data less the header row
df.columns = new_header #set the header row as the df header


zones = [['CA2,SW1,SW3,SW2,STH2,STH3,STH0,NTH0,DR1,DR2,MID1,MID2,MID3,NE1,NE2,NE3,NTH1,NTH2,NTH3,PLN1,PLN2,PLN3,NW1,NW2'],['CA2,SW1,SW3,SW2,STH2,STH3,STH0,NTH0,DR1,DR2,MID1,MID2,MID3,NE1,NE2,NE3,NTH1,NTH2,NTH3,PLN1,PLN2,PLN3,NW1,NW2'],['CA2,SW1,SW3,SW2,STH2,STH3,STH0,NTH0,DR1,DR2,MID1,MID2,MID3,NE1,NE2,NE3,NTH1,NTH2,NTH3,PLN1,PLN2,PLN3,NW1,NW2']]
replace_values = ['All Zones', 'All Zones ', 'all']


df = df.replace(to_replace=replace_values, value=zones)
df = df.explode("ZONES")



df.to_csv("outout.csv")

【问题讨论】:

    标签: python pandas dataframe csv delimiter


    【解决方案1】:

    试试这个:

    import pandas as pd
    
    id = [3609112]
    reg_price = [3.99]
    promo_price = [3.99]
    zones = ["CA2,SW1,SW3,SW2"]
    
    df = pd.DataFrame(id, columns=['id'])
    df['reg_price'] = reg_price
    df['promo_price'] = promo_price
    df['zones'] = zones
    
    def convert_to_list(row):
        arr = row.split(',')
        l = [x for x in arr]
        return l
    
    df['zones'] = df['zones'].apply(convert_to_list)
    print(df.explode('zones'))
    

    【讨论】:

    • 这正是我所需要的。我必须将我的 Zone 列转换为字符串类型,然后它完全按照我的意图工作。感谢您的帮助,对不起,我没有足够高的代表来投票,但答案被接受了。
    • 不客气
    猜你喜欢
    • 2016-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-24
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    相关资源
    最近更新 更多