要删除列中的逗号和美元符号。但是当我这样做时,桌子将它们打印出来并且仍然存在于那里。有没有不同的方法来使用熊猫功能删除commans和美元符号。我无法在API文档中找到任何内容,或者我可能在错误的地方找到了
import pandas as pd
import pandas_datareader.data as web
players = pd.read_html('http://www.usatoday.com/sports/mlb/salaries/2013/player/p/')
df1 = pd.DataFrame(players[0])
df1.drop(df1.columns[[0,3,4, 5, 6]], axis=1, inplace=True)
df1.columns = ['Player', 'Team', 'Avg_Annual']
df1['Avg_Annual'] = df1['Avg_Annual'].replace(',', '')
print (df1.head(10))
答案 0 :(得分:49)
您必须按http://pandas.pydata.org/pandas-docs/stable/text.html
访问str
属性
df1['Avg_Annual'] = df1['Avg_Annual'].str.replace(',', '')
df1['Avg_Annual'] = df1['Avg_Annual'].str.replace('$', '')
df1['Avg_Annual'] = df1['Avg_Annual'].astype(int)
答案 1 :(得分:10)
从this answer ... 无耻地偷走了,这个答案只是关于改变一个角色并且没有完成酷感:因为它需要一个字典,你可以替换任何数字一次性,以及任意数量的列。
# if you want to operate on multiple columns, put them in a list like so:
cols = ['col1', 'col2', ..., 'colN']
# pass them to df.replace(), specifying each char and it's replacement:
df[cols] = df[cols].replace({'\$': '', ',': ''}, regex=True)
@shivsn发现你需要使用regex=True
;你已经知道了替换(但也没有尝试在多个列上同时使用它或同时使用美元符号和逗号)。
这个答案只是简单地说明了我在其他地方为我这些人发现的细节(例如python
和pandas
的新手。希望它有用。
答案 2 :(得分:2)
@ bernie的答案是你的问题的答案。这是我对在pandas中加载数值数据的一般问题的看法。
数据来源通常是为直接消费而生成的报告。因此存在额外的格式,如[0-9.]
,千位分隔符,货币符号等。所有这些对于读取都很有用,但会导致默认解析器出现问题。我的解决方案是将列强制转换为字符串,逐个替换这些符号,然后将其转换回适当的数字格式。具有仅保留df[col] = df[col].astype(str) # cast to string
# all the string surgery goes in here
df[col] = df[col].replace('$', '')
df[col] = df[col].replace(',', '') # assuming ',' is the thousand's separator in your locale
df[col] = df[col].replace('%', '')
df[col] = df[col].astype(float) # cast back to appropriate type
的样板功能是诱人的,但是在科学记数法的情况下也会导致千位分隔符和小数被交换的问题。这是我的代码,我将其包装到一个函数中并根据需要应用。
{{1}}