我正在从具有一些无限值的csv中加载df(或者我猜是这样)。我不想更改csv文件(因为它们是我程序的输入)
因此,当我按以下方式加载此特定文件时:
blocked2 = pd.read_csv(file8, usecols=[1,2,3,4])
blocked2.columns = names1
blocked2.head(), blocked2.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 863708 entries, 0 to 863707
Data columns (total 4 columns):
Time 863708 non-null float64
LP 863708 non-null float64
HP 863708 non-null float64
Icomp 863708 non-null object
dtypes: float64(3), object(1)
memory usage: 26.4+ MB
我对Icomp专栏感兴趣。我尝试绘制它,但发现某些str值有问题
plt.plot(blocked2.Icomp)
plt.show()
TypeError: 10.20147 is not a string
这很奇怪,因为这是当前(安培)值的列,因此应该全部为浮点数。
查看csv文件,我发现某些值写为 24.12088000 AZ p
所以我在加载的数据框中查看了这些值,我得到了
15907
15.908
9.569441
15.00891
24.12088000
15908
15.909
9.574703
15.02067
*∞*
15909
15.910
9.574703
15.03243
*∞*
15910
15.911
9.574703
15.02067
*∞*
我有无穷大的值,它们是一个str类型。我的问题是:无论如何,我可以找到这些str值并将其从数据框中删除吗?因为我会收到很多这些CSV文件,并且无限值不能在同一位置!
提前感谢您的帮助:)
答案 0 :(得分:4)
您可以通过pd.to_numeric
转换为数字。然后分别使用np.isfinite
和pd.Series.notnull
过滤掉非限定或非数字数据。这是一个演示:
s = pd.Series([32.32, -np.inf, 'inf', 'asdfa', -324.42, np.inf])
s = pd.to_numeric(s, errors='coerce')
s = s[np.isfinite(s) & s.notnull()]
0 32.32
4 -324.42
dtype: float64
答案 1 :(得分:0)
您可以执行以下操作;
第一
blocked2.replace([np.inf, -np.inf], np.nan,inplace=True)
然后
blocked2.fillna(0,inplace=True)
或
blocked2.dropna(inplace=True)
我自己还没有运行这段代码,但是这些行上的某些内容应该可以工作。