假设我有以下示例DataFrame
from pandas import Series, DataFrame
df = DataFrame({'A':['1', '<2', '3']})
我想将A列从字符串转换为整数。在'&lt; 2'的情况下,我想简单地取消'&lt;'在第二行中签名并输入1(最接近的小于2的整数)。最有效的方法是什么?这只是一个例子。我正在处理的实际数据有数十万行。 感谢您的帮助。
答案 0 :(得分:3)
您可以使用Series.apply:
import pandas as pd
df = pd.DataFrame({'A':['1', '<2', '3']})
df['A'] = df['A'].apply(lambda x: int(x[1:])-1 if x.startswith('<') else int(x))
print(df.dtypes)
# A int64
# dtype: object
产量
print(df)
A
0 1
1 1
2 3
[3 rows x 1 columns]
答案 1 :(得分:1)
您可以在DataFrame上使用 applymap 并删除&#34;&lt;&#34;字符如果出现在字符串中:
df.applymap(lambda x: x.replace('<',''))
这是输出:
A
0 1
1 2
2 3
答案 2 :(得分:1)
以下是另外两种方法,这可能有助于前进!
from pandas import Series, DataFrame
df = DataFrame({'A':['1', '<2', '3']})
输出
df.A.str.strip('<').astype(int)
Out[1]:
0 1
1 2
2 3
如果您尝试删除数字中间的字符(例如,如果您有逗号或其他内容),这种方式会有所帮助。
df = DataFrame({'A':['1', '1,002', '3']})
df.A.str.replace(',', '').astype(int)
输出
Out[11]:
0 1
1 1002
2 3
Name: A, dtype: int64
答案 3 :(得分:0)
>>> import re
>>> df.applymap(lambda x: int(re.sub(r'[^0-9.]', '', x)))
A
0 1
1 2
2 3