pandas 如何将包含逗号字符串的列拆分为多个列,然后在Python Dataframe 中删除原始列?

t3irkdon  于 2023-03-06  发布在  Python
关注(0)|答案(1)|浏览(171)

我有一个pandas Dataframe ,其中的列包含带逗号的字符串。我想将这些列拆分为多个列,并删除原始列。
数据示例如下:

df = pd.DataFrame({'City, Country': ['Thimphu, Bhutan', 'NY, USA', 'London, UK'],
                   'Currency, POP':['BTN, 1.0', 'USD, 20.0', 'GBP, 12.0']})

我想让它给予如下输出:

df = pd.DataFrame({'City': ['Thimphu', 'NY', 'London'], 'Country': ['Bhutan', 'USA', 'UK'], 'Currency': ['BTN', 'USD', 'GBP'], 'POP': ['1.0', '20.0', '12.0']})

因为我不想“手动”拆分、重命名和删除每一列,所以我定义了一个函数来完成这项工作。

def splitDropCols(col_name, df):
    new_col_names = col_name.split(',')
    new_col_names = [x.strip() for x in new_col_names]
    df[new_col_names] = df[col_name].str.split(',', expand = True)
    df.drop(columns = col_name, inplace = True)
    return df

但是,它正在给出ValueError: Columns must be same length as key,我做错了什么?

z0qdvdin

z0qdvdin1#

  • ', '分隔符拆分值,并使用df.explode将其分解为单独的行
  • ', '分隔符拆分所有列,并收集每个单独列的成对值
df = df.apply(lambda x: x.str.split(', ')).explode(df.columns.tolist())
df = pd.DataFrame(dict((col, df[c].values[i::2]) for c in df.columns
                       for i, col in enumerate(c.split(', '))))
print(df)
City Country Currency   POP
0  Thimphu  Bhutan      BTN   1.0
1       NY     USA      USD  20.0
2   London      UK      GBP  12.0

相关问题