Python,pandas:如何删除大于号

时间:2014-03-24 21:31:53

标签: python pandas

假设我有以下示例DataFrame

from pandas import Series, DataFrame
df = DataFrame({'A':['1', '<2', '3']})

我想将A列从字符串转换为整数。在'&lt; 2'的情况下,我想简单地取消'&lt;'在第二行中签名并输入1(最接近的小于2的整数)。最有效的方法是什么?这只是一个例子。我正在处理的实际数据有数十万行。 感谢您的帮助。

4 个答案:

答案 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