Pandas:在大数据中从字符串值中删除浮点值的简单方法



我正在使用juypter来分析一个大的csv文件。

文件中有大约40,000个str值和15个float值。我正试图将所有str值转换为数字,以便我可以分析所有数据。

但是,由于数据内随机浮动值,我不能。有没有一种简单的方法可以简单地删除所有这些值?

我对编码比较陌生,所以如果这看起来像一个"哑巴",请原谅我。质疑。

import pandas as pd
df = pd.read_csv('stripperdata.csv')
for i in df['Pressure']:
if isinstance(i , str):
int(i)
if isinstance(i , float):
df.remove(i)

当我这样做时,我得到一个错误"Invalid literal for int() with base 10:"

假设您有以下数据框架:

df = pd.DataFrame({'val': ['1', 2.0, '3', 4, '5', '6.6', '7', '8.8']})
val
0    1
1  2.0          <=== float
2    3
3    4          <=== int
4    5
5  6.6
6    7
7  8.8

,其中2.0和4分别是float和int类型。其他是数字字符串。

可以通过以下方式删除浮点数和整型值,例如:

s_cleaned = df['val'].loc[~df['val'].map(lambda x: isinstance(x, float) | isinstance(x, int))]
结果:

print(s_cleaned)

0      1
2      3
4      5
5    6.6
6      7
7    8.8
Name: val, dtype: object

你也可以"remove"通过将这些float和int值更改为NaN(空值),如下所示:

df['val'] = df['val'].mask(df['val'].map(lambda x: isinstance(x, float) | isinstance(x, int)))

结果

print(df)
val
0    1
1  NaN
2    3
3  NaN
4    5
5  6.6
6    7
7  8.8

编辑:我第一次在代码中犯了一个错误。我在迭代期间删除索引,导致它跳过一个元素。我承认这是一个混乱的解决方案。我还在学习自己。

values = ["11", "15", "74", "2.3", "11.7", "34"]
index = 0
for i in values:
print(values[index])
if "." in values[index]:
print("Here's one: " + values[index])
values.remove(values[index])
elif isinstance(values[index], str):
int(values[index])
index += 1
print(index)
print(values)