我有一个数据帧,其中每个单元格中包含一个长度变化的字符串,即
Num
(1,2,3,4,5)
(6,7,8)
(9)
(10,11,12)
我想避免尝试对只有一个数字的单元格执行str.split(',')。但是,我希望将所有单个数字都转换为一个元素的列表。
这是我尝试过的内容,它给出一个错误,指出“'int'对象不可调用”
if(df['Num'].size() > 1):
df['Num'] = df['Num'].str.split(',')
更新以进行澄清:
Index Num
0 2,6,7
1 1,3,6,7,8
2 2,4,7,8,9
3 3,5,8,9,10
4 4,9,10
5 1,2,7
6 1,2,3,6,8
7 2,3,4,7,9
8 3,4,5,8,10
9 4,5,9
10 2,3
11 1,3
12 1,2
13 2,3,4
14 1,3,4
15 1,2,4
16 1,2,3
17 2
18 1
我正在尝试获取此数据帧并将每个Num行从一串数字转换为一个列表。我希望将仅包含一个数字(17和18)的所有索引都转换为包含单个元素(本身)的列表。
下面的代码仅在每个字符串均包含多个以','分隔的数字时有效。
df['Adj'] = df['Adj'].str.split(',')
运行以上代码时得到的输出数据帧。请注意,只有一个数字的元素现在是nan。
Index Num
0 [2, 6, 7]
1 [1, 3, 6, 7, 8]
2 [2, 4, 7, 8, 9]
3 [3, 5, 8, 9, 10]
4 [4, 9, 10]
5 [1, 2, 7]
6 [1, 2, 3, 6, 8]
7 [2, 3, 4, 7, 9]
8 [3, 4, 5, 8, 10]
9 [4, 5, 9]
10 [2, 3]
11 [1, 3]
12 [1, 2]
13 [2, 3, 4]
14 [1, 3, 4]
15 [1, 2, 4]
16 [1, 2, 3]
17 NaN
18 NaN
答案 0 :(得分:1)
假设您的列都是字符串,而您只想将单个数字作为list
中的str
,则可以达到目的:
df['Num'].str.strip('()').str.split(',')
# 0 [1, 2, 3, 4, 5]
# 1 [6, 7, 8]
# 2 [9]
# 3 [10, 11, 12]
# Name: Num, dtype: object
由于并非所有数据均为str
类型,因此您需要首先将其强制为str
,以确保正确调用了字符串方法:
df['Num'].astype(str).str.split(',')
# 0 [2, 6, 7]
# 1 [1, 3, 6, 7, 8]
# 2 [2, 4, 7, 8, 9]
# ...
# 16 [1, 2, 3]
# 17 [2]
# 18 [1]