我正在使用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)