【发布时间】:2021-01-29 14:24:24
【问题描述】:
我正在尝试将数据框列拆分为多个列,如下所示:
- 总共有三列。两个应在新数据框中重命名,而第三个应拆分为新列。
- 使用特定字符(例如“:”)进行拆分
- 需要拆分的列可以有不同数量的“:”拆分。因此,对于不同的行,新列可能会有所不同,而对于某些行,某些列的值会保留为 NULL。没关系。
- 随后形成的每个列都有一个特定的名称。可以形成的最大列数是已知的。
- 有四个数据帧。每个都有相同的格式列,必须拆分。
我遇到了以下解决方案,但由于上述原因它们不起作用:
-
pd.concat([df[[0]], df[1].str.split(', ', expand=True)], axis=1)- 这会创建名称为 0、1、2 的列...我需要新列具有特定名称。
-
df = df.apply(lambda x:pd.Series(x))- 这不会改变数据框。不明白为什么。
-
df['command'], df['value'] = df[0].str.split().str- 此处列名已正确重命名,但这需要事先知道将形成多少列。就我而言,它对于每个数据帧都是动态的。对于行,拆分成功地将 NULL 值放入额外的列中。但是对另一个数据帧使用相同的代码会产生一个错误,提示键的数量应该相同。
我无法在这些答案上发布 cmets,因为我是这个社区的新手。如果有人能帮助我了解如何实现我的目标,我将不胜感激 - 即:在将新生成的列重命名为预定义名称的同时,动态地使用相同的代码将一列拆分为多个用于不同的数据帧。
例如:
数据框 1:
Col1 Col2 Col3
0 A A:B:C A
1 A A:B:C:D:E A
2 A A:B A
数据框 2:
Col1 Col2 Col3
0 A A:B:C A
1 A A:B:C:D A
2 A A:B A
输出应该是: 新数据框 1:
Col1 ColA ColB ColC ColD ColE Col3
0 A A B C NaN NaN A
1 A A B C D E A
2 A A B NaN NaN NaN A
新数据框 2:
Col1 ColA ColB ColC ColD ColE Col3
0 A A B C NaN NaN A
1 A A B C D NaN A
2 A A B NaN NaN NaN A
(如果没有ColE,那也没关系。)
在此之后,我将把这些数据帧连接成一个,我将需要针对 Col1 和 Col3 组合的单个数据帧的所有 ColA 到 ColE 的计数。所以,我们需要牢记这一点。
【问题讨论】:
-
输出示例的顺序是否错误?
-
是的。对此感到抱歉。更新的问题。
-
我的回答对你有帮助吗?
-
@PabloC 嘿。感谢您的回复。是的一部分。实际数据和列名与示例不同。所以我们不需要初始最大拆分来获取列名。我仍然必须手动从所有数据框中获取最大列数来决定列名。发布后,我这样做:
df = pd.concat([df[old_columns], df[column_for_split].str.split(':', expand=True)], axis=1)并以任一方式重命名列:df = df.rename(columns= {0: name1, 1: name2, 2: name3, 3: name4...})或df.columns = [old_columns,new_columns]
标签: python pandas dataframe split