单列拆分

效果预览:下图是按County列拆分

【Pandas】一行拆分成多行,按分隔符 - 图1

【Pandas】一行拆分成多行,按分隔符 - 图2

  1. if __name__ == '__main__':
  2. import pandas as pd
  3. # 创建示例dataframe
  4. df = pd.DataFrame({'Country': ['China,US', 'Japan,EU', 'UK,Australia', 'Singapore,Netherland'],
  5. 'Number': [100, 150, 120, 90],
  6. 'Value': [1, 2, 3, 4],
  7. 'label': list('abcd')})
  8. # 按Country拆分
  9. df_split_row = df.drop('Country', axis=1).join(
  10. df['Country'].str.split(',', expand=True).stack().reset_index(level=1, drop=True).rename('Country'))
  11. print(df)
  12. print("*"*20, "拆分后效果", "*"*20)
  13. print(df_split_row)

多列拆分

效果预览:按Color列和Size列拆分

image.png

  1. # 把拆分多行封装成函数
  2. def df_split_row(df, split_cols: list):
  3. """
  4. 拆分列以指定分隔符为多行
  5. :param df: 待拆分dataframe
  6. :param split_cols: 指定拆分的列,可以单列、多列
  7. :return: 拆分后的dataframe
  8. """
  9. df_convert = df.drop(columns=split_cols, axis=1)
  10. for column in split_cols:
  11. df_convert = df_convert.join(
  12. df[column].str.split(',', expand=True).stack().reset_index(level=1, drop=True).rename(column))
  13. df_convert = df_convert.reset_index(drop=True)
  14. return df_convert
  15. if __name__ == '__main__':
  16. import pandas as pd
  17. # 创建示例dataframe
  18. df = pd.DataFrame({'Code': ['212027'],
  19. 'Color': ['blue, pink, yellow'],
  20. 'Size': ['12-18M, 2-3Y, 3-4Y']})
  21. print(df_split_row(df, split_cols=['Color', 'Size']))
  22. print(df_split_row(df, split_cols=['Size']))