有一些数据,看起来像这样。
Name Best Rating
Player1 97.1% (FS)
Player2 96.3% (CB)
Player3 95.5% (DR)
Player4 95.4% (DL)
我想把这列数据拆开,使它看起来像这样
Name Max Rating Best Position
Player1 97.1 FS
Player2 96.3 CB
Player3 95.5 DR
Player4 95.4 DL
我的代码是这样的
import pandas as pd
df = pd.read_csv('prem1.csv', sep = ";", encoding = 'unicode_escape')
cols = ['Max Rating', 'Best Position']
df['Best Rating'].str.split('% ', expand=True).rename(columns = cols)
df.head()
当我尝试这段代码时,我得到以下错误信息。
TypeError: 'list' object is not callable
以下是对错误代码的更详细解释(截图)。https:/imgur.comvbGswh9
有什么想法,这里出了什么问题,为什么我不能分割列?
最简单的分割方法是这样的。
In [447]: df['Max Rating'], df['Best Position'] = df['Best Rating'].str.split(' ', 1).str
In [450]: df['Max Rating'] = df['Max Rating'].str.replace('%','')
In [452]: df.drop('Best Rating', 1, inplace=True)
In [456]: df['Best Position'] = df['Best Position'].str.replace(r'[\(\)\d]+', '')
In [457]: df
Out[457]:
Name Max Rating Best Position
0 Player1 97.1 FS
1 Player2 96.3 CB
2 Player3 95.5 DR
3 Player4 95.4 DL
pandas.DataFrame.rename
需要一个callable或mapper来实现。columns
参数。 通常情况下,一个 dict
就可以了。
试试这个。
df['Best Rating'].str.split('% ', expand=True).rename(columns = {k: v for k, v in enumerate(col)})
或者如果你想更明确一点
cols = {0: 'Max Rating', 1: 'Best Position'}
df['Best Rating'].str.split('% ', expand=True).rename(columns = cols)
结果:
Max Rating Best Position
0 97.1 (FS)
1 96.3 (CB)
2 95.5 (DR)
3 95.4 (DL)
把它放在一起
>>> df.drop('Best Rating', axis=1).join(df['Best Rating'].str.split('% ', expand=True).rename(columns = {k: v for k, v in enumerate(['Max Rating', 'Best Position'])}))
Name Max Rating Best Position
0 Player1 97.1 (FS)
1 Player2 96.3 (CB)
2 Player3 95.5 (DR)
3 Player4 95.4 (DL)