使用 str.split() 设置数据框中列的值,但仅限于某些行

3周前#Python

我有一个数据框,例如:

id some_string  
1. blah,count=1,blah
2. blah,blah
3  blah,count=4,blah
4. blah,blah
5  blah,count=4,blah
6. blah,count=3,blah

我想使用 split 来设置一个单独的列,其值为 count 以获取:

id some_string        count
1  blah,count=1,blah   1
2  blah,blah           0
3  blah,count=4,blah   4
4  blah,blah           0 
5  blah,count=4,blah   4
6  blah,count=3,blah   3

我试过:

df['count'].str.split('[count=|,]',expand=True)[3]

但它:

Length of values (4) does not match length of index (6)

除了循环遍历数据帧条目之外,是否有一种明显的方法可以做到这一点?

回答
A
Alfred Hartmann
3周前

不要拆分,使用提取物:

df['count'] = (df['some_string'].str.extract(r'count=(\d+)', expand=False)
  .fillna(0).astype(int)
 )

输出:

    id        some_string  count
0  1.0  blah,count=1,blah      1
1  2.0          blah,blah      0
2  3.0  blah,count=4,blah      4
3  4.0          blah,blah      0
4  5.0  blah,count=4,blah      4
5  6.0  blah,count=3,blah      3
S
Sherwood Lindgren MD
3周前

您可以使用 str.extract:

df['count'] = df['some_string'].str.extract('count=(\d+)').fillna(0).astype(int)
print(df)

# Output
   id        some_string count
0   1  blah,count=1,blah     1
1   2          blah,blah     0
2   3  blah,count=4,blah     4
3   4          blah,blah     0
4   5  blah,count=4,blah     4
5   6  blah,count=3,blah     3