在pandas中使用str分割

Shu*_*amA 8 python string split dataframe pandas

这是我为我的问题创建的一些虚拟数据.我有两个问题:

  1. 为什么要在查询的第一部分split使用str而不是在第二部分中使用?
  2. 为什么要[0]拾取第1部分中的第一行和第2部分中每行的第一行?

chess_data = pd.DataFrame({"winner": ['A:1','A:2','A:3','A:4','B:1','B:2']})

chess_data.winner.str.split(":")[0]
['A', '1']

chess_data.winner.map(lambda n: n.split(":")[0])
0    A
1    A
2    A
3    A
4    B
5    B
Name: winner, dtype: object
Run Code Online (Sandbox Code Playgroud)

piR*_*red 10

  • chess_data 是一个数据帧
  • chess_data.winner 是一个系列
  • chess_data.winner.str 是一个特定于字符串和优化(在一定程度上)的方法的访问器
  • chess_data.winner.str.split 就是这样一种方法
  • chess_data.winner.map是一个不同的方法,它接受字典或可调用对象,并调用可与系列中的每个元素一起调用的方法,或者在系列的每个元素上调用字典get方法.

在使用chess_data.winner.str.splitPandas 的情况下,做一个循环并执行一种str.split.虽然map是一种更粗暴的做同样事情的方式.


随你的数据.

chess_data.winner.str.split(':')

0    [A, 1]
1    [A, 2]
2    [A, 3]
3    [A, 4]
4    [B, 1]
5    [B, 2]
Name: winner, dtype: object
Run Code Online (Sandbox Code Playgroud)

为了获得每个第一个元素,您将需要再次使用字符串访问器

chess_data.winner.str.split(':').str[0]

0    A
1    A
2    A
3    A
4    B
5    B
Name: winner, dtype: object
Run Code Online (Sandbox Code Playgroud)

这是执行你在你的工作中所做的相同的方式 map

chess_data.winner.map(lambda x: x.split(':')[0])
Run Code Online (Sandbox Code Playgroud)

你也可以使用一种理解

chess_data.assign(new_col=[x.split(':')[0] for x in chess_data.winner])

  winner new_col
0    A:1       A
1    A:2       A
2    A:3       A
3    A:4       A
4    B:1       B
5    B:2       B
Run Code Online (Sandbox Code Playgroud)


cs9*_*s95 6

chess_data['winner'].str.split(':')[0] 
['A', '1']
Run Code Online (Sandbox Code Playgroud)

是相同的

chess_data['winner'].str.split(':').loc[0] 
['A', '1']
Run Code Online (Sandbox Code Playgroud)

chess_data['winner'].map(lambda n: n.split(':')[0])
0    A
1    A
2    A
3    A
4    B
5    B
Name: winner, dtype: object
Run Code Online (Sandbox Code Playgroud)

是相同的

chess_data.winner.str.split(':').str[0]
0    A
1    A
2    A
3    A
4    B
5    B
Name: winner, dtype: object
Run Code Online (Sandbox Code Playgroud)

哪个是一样的

pd.Series([x.split(':')[0] for x in chess_data['winner']], name='winner') 
0    A
1    A
2    A
3    A
4    B
5    B
Name: winner, dtype: object
Run Code Online (Sandbox Code Playgroud)


Vai*_*ali 5

它在Indexing using str下的文档中进行了解释

.str [index]表示法按位置索引字符串,其中[index]将根据系列的索引进行切片.

使用示例

s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan,'CABA', 'dog', 'cat'])

s.str[3]
Run Code Online (Sandbox Code Playgroud)

返回每行索引3处的元素

0    NaN
1    NaN
2    NaN
3      a
4      a
5    NaN
6      A
7    NaN
8    NaN
Run Code Online (Sandbox Code Playgroud)

s[3]
Run Code Online (Sandbox Code Playgroud)

回报

'Aaba'
Run Code Online (Sandbox Code Playgroud)