有一个像下面这样的数据框,它有一个不干净的列“ id”,它应该是数字列
id, name
1, A
2, B
3, C
tt, D
4, E
5, F
de, G
是否有一种简洁的方法删除行,因为tt和de不是数值
tt,D
de,G
使数据框干净?
id, name
1, A
2, B
3, C
4, E
5, F
您可以使用标准的字符串方法,isnumeric
并将其应用于id
列中的每个值:
import pandas as pd
from io import StringIO
data = """
id,name
1,A
2,B
3,C
tt,D
4,E
5,F
de,G
"""
df = pd.read_csv(StringIO(data))
In [55]: df
Out[55]:
id name
0 1 A
1 2 B
2 3 C
3 tt D
4 4 E
5 5 F
6 de G
In [56]: df[df.id.apply(lambda x: x.isnumeric())]
Out[56]:
id name
0 1 A
1 2 B
2 3 C
4 4 E
5 5 F
或者,如果您想id
用作索引,则可以执行以下操作:
In [61]: df[df.id.apply(lambda x: x.isnumeric())].set_index('id')
Out[61]:
name
id
1 A
2 B
3 C
4 E
5 F
虽然情况下与pd.to_numeric
未使用apply
的方法,它比与施加慢几乎两倍np.isnumeric
于str
列。另外,我使用pandas添加了选项,str.isnumeric
它键入的次数更少,但使用起来还是更快pd.to_numeric
。但是pd.to_numeric
更笼统,因为它可以与任何数据类型一起使用(不仅限于字符串)。
df_big = pd.concat([df]*10000)
In [3]: df_big = pd.concat([df]*10000)
In [4]: df_big.shape
Out[4]: (70000, 2)
In [5]: %timeit df_big[df_big.id.apply(lambda x: x.isnumeric())]
15.3 ms ± 2.02 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [6]: %timeit df_big[df_big.id.str.isnumeric()]
20.3 ms ± 171 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
In [7]: %timeit df_big[pd.to_numeric(df_big['id'], errors='coerce').notnull()]
29.9 ms ± 682 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
问题内容: 我已经尝试解决这个问题一段时间了,我试图从DB_user列中删除非ASCII字符并尝试将它们替换为空格。但是我不断出错。这是我的数据框的外观: 我正在使用此功能,这是我在研究SO问题时遇到的。 我不断收到错误: 但是,我认为通过使用filter_func函数中的循环,可以通过在’ord’中输入一个char来解决这个问题。因此,当它遇到非ASCII字符时,应将其替换为空格。 有人可以帮我
df.审查: 目的是删除非英文行。我试过这个和这个,但都没用。下面的代码错误地将所有行标记为英语。
我有以下数据帧: 我需要删除等于的行。最有效的方法是什么?
现在我正在上一门机器学习课程。现在我应该导入我的数据集之后,我读了一个“CSV”文件导入我的数据集,我想删除一个列,但我不知道如何做。
问题内容: 我对此有一个类似的问题:Pandas DataFrame:从一列中的字符串中删除不需要的部分 。 所以我用了: 大多数项目以“ PPI /”开头,但并非全部。似乎当没有’PPI /’后缀的项目遇到此错误时: AttributeError:“ float”对象没有属性“ lstrip” 我在这里想念什么吗? 问题答案: 使用replace: 或string.replace:
我想从字符串类型的熊猫列中删除小数点 Df 我正试着去掉那一栏的小数 df['Net Sales']已经是字符串类型。 我尝试如下: < code>df['净销售额'] = df['净销售额']。astype(str)。替换(' \.0 ','',regex=True) 但我得到的错误如下: < code>ValueError:基数为10的int()的文本无效:“1567.55” 谢谢。