import pandas as pd
import statistics
df=print(pd.read_csv('001.csv',keep_default_na=False, na_values=[""]))
print(df)
我正在使用此代码创建一个没有NA值的数据框。我有几个CSV文件,我想计算其中一个列的平均值 - 硫酸盐。这个专栏有很多' NA'价值,我试图排除。即使在使用上述代码之后,也不会从数据框中排除“NA”。 请建议。
答案 0 :(得分:0)
方法1:
df[['A','C']].apply(lambda x: my_func(x) if(np.all(pd.notnull(x[1]))) else x, axis = 1)
使用 pandas notnnull
方法2:
df = df[np.isfinite(df['EPS'])]
方法3:使用dropna Here
In [24]: df = pd.DataFrame(np.random.randn(10,3))
In [25]: df.ix[::2,0] = np.nan; df.ix[::4,1] = np.nan; df.ix[::3,2] = np.nan;
In [26]: df
Out[26]:
0 1 2
0 NaN NaN NaN
1 2.677677 -1.466923 -0.750366
2 NaN 0.798002 -0.906038
3 0.672201 0.964789 NaN
4 NaN NaN 0.050742
5 -1.250970 0.030561 -2.678622
6 NaN 1.036043 NaN
7 0.049896 -0.308003 0.823295
8 NaN NaN 0.637482
9 -0.310130 0.078891 NaN
In [27]: df.dropna() #drop all rows that have any NaN values
Out[27]:
0 1 2
1 2.677677 -1.466923 -0.750366
5 -1.250970 0.030561 -2.678622
7 0.049896 -0.308003 0.823295
答案 1 :(得分:0)
我认为您应该按原样导入.csv文件,然后操纵数据框。 然后,您可以使用以下任何方法。
foo[foo.notnull()]
或
foo.dropna()
答案 2 :(得分:0)
在添加axis=0
和how='any'
之前,我遇到了同样的错误。
df=df.dropna(axis=0, how='any')
答案 3 :(得分:0)
columsMissng=[]
for i in columns:
c=df.loc[df[i] == '?', i].count();
columsMissng.append((i,c));
c=0
dropcolumsMissng=[]
for i in columsMissng:
if i[1]>20000:
count=count+1;
dropcolumsMissng.append(i[0])
newDF=df.drop(columns=dropcolumsMissng)
可以代替'?'
放置要计数的任何值,而if i[1]>20000:
您可以将阈值设置为数据的50%或任何您想要的值。
如果您要删除“ NaN”
c=newDF.columns.values
dropcolumsMissng=[]
for i in columns:
num_nans = len(newDF) - newDF[i].count()
if num_nans>20000:
dropcolumsMissng.append(i)
newDF=newDF.drop(columns=dropcolumsMissng)