Pandas DataFrame有效地将一个列拆分为多个列



我有一个类似的数据框架:

data = {"col_1": [0, 1, 2],
"col_2": ["abc", "defg", "hi"]}
df = pd.DataFrame(data)

视觉:

col_1 col_2
0      0   abc
1      1   defg
2      2   hi

我想做的是拆分col_2中的每个字符,并将其附加为新列到数据框架

示例迭代法:

def get_chars(string):
chars = []
for char in string:
chars.append(char)
return chars
char_df = pd.DataFrame()
for i in range(len(df)):
char_arr = get_chars(df.loc[i, "col_2"])
temp_df = pd.DataFrame(char_arr).T
char_df = pd.concat([char_df, temp_df], ignore_index=True, axis=0)
df = pd.concat([df, char_df], ignore_index=True, axis=1)

结果是正确的形式:

0     1  2  3    4    5
0  0   abc  a  b    c  NaN
1  1  defg  d  e    f    g
2  2    hi  h  i  NaN  NaN

但是我相信像这样迭代数据帧是非常低效的,所以我想找到一个更快的(理想的矢量化)解决方案。

实际上,我并没有真正拆分字符串,但这个问题的重点是找到一种有效地处理一列并返回多列的方法。

如果需要性能,使用DataFrame构造函数将值转换为列表:

df = df.join(pd.DataFrame([list(x) for x in df['col_2']], index=df.index))

或:

df = df.join(pd.DataFrame(df['col_2'].apply(list).tolist(), index=df.index))

print (df)
col_1 col_2  0  1     2     3
0      0   abc  a  b     c  None
1      1  defg  d  e     f     g
2      2    hi  h  i  None  None

最新更新