在数据框中放置str

时间:2018-10-29 10:46:12

标签: python string pandas dataframe

我正在从具有一些无限值的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文件,并且无限值不能在同一位置!

提前感谢您的帮助:)

2 个答案:

答案 0 :(得分:4)

您可以通过pd.to_numeric转换为数字。然后分别使用np.isfinitepd.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)

我自己还没有运行这段代码,但是这些行上的某些内容应该可以工作。