id string
0 31672;0
1 31965;0
2 0;78464
3 51462
4 31931;0
嗨,我有那张桌子。我想用';'拆分字符串表,并将其存储到新列。最后一栏应该是这样的
id string word_count
0 31672;0 2
1 31965;0 2
2 0;78464 2
3 51462 1
4 31931;0 2
如果有人知道如何用python做它会很好。
选项1
使用str.split
+ str.len
的基本解决方案 -
df['word_count'] = df['string'].str.split(';').str.len()
df
string word_count
id
0 31672;0 2
1 31965;0 2
2 0;78464 2
3 51462 1
4 31931;0 2
选项2
使用str.count
的聪明(高效,耗费空间更少)解决方案 -
df['word_count'] = df['string'].str.count(';') + 1
df
string word_count
id
0 31672;0 2
1 31965;0 2
2 0;78464 2
3 51462 1
4 31931;0 2
警告 - 即使是空字符串,这也会将字数归为1(在这种情况下,坚持使用选项1)。
如果您希望每个单词占用一个新列,可以使用tolist
快速简单地将分割加载到新数据帧中,并使用concat
将新数据帧与原始数据连接起来 -
v = pd.DataFrame(df['string'].str.split(';').tolist())\
.rename(columns=lambda x: x + 1)\
.add_prefix('string_')
pd.concat([df, v], 1)
string word_count string_1 string_2
id
0 31672;0 2 31672 0
1 31965;0 2 31965 0
2 0;78464 2 0 78464
3 51462 1 51462 None
4 31931;0 2 31931 0