我有这样格式的数据:
Date,Open,High,Low,Close,Adj Close,Volume
2019-07-31,0.44,0.4401,0.44,0.44,0.44,32900
2019-08-01,0.45,0.45,0.45,0.45,0.45,200
2019-08-02,0.44,0.44,0.43,0.44,0.44,13800
2019-08-08,0.45,0.4501,0.45,0.4501,0.4501,400
2019-08-15,0.43,0.43,0.43,0.43,0.43,300
2019-08-15,0.0,0.0,0.0,0.43,0.43,0
注意最后一行有空数据。
如何过滤此行或删除此行?
df = None
for ticker in tickers:
try:
df = pd.read_csv('stock_data/daily/{}.csv'.format(ticker), parse_dates=True, index_col=0).dropna()
except FileNotFoundError as e:
continue # continue with next ticker
df_closes = df['Close']
if len(df_closes) < 4:
continue # continue with next ticker
df_closes = df_closes[pd.notnull(df['Close'])] # delete rows with empty data
df_closes = df_closes.reindex(index=df_closes.index[::-1]) # reversing
最佳答案
鉴于 Volume
列为零,我假设您认为记录为空,我们可以使用以下方法过滤掉它们:
df = df[df['Volume'] > 0]
或者我们可以检查Open
、High
、Low
中至少有一个与零不同,并过滤掉具有以下特征的行:这些列中只有零:
df = df[df[['Open', 'High', 'Low']].any(axis=1)]
您可以使用以下方法删除重复索引:
df = df[<b>~df.index.duplicated()</b>]
我们可以向 duplicated(..)
添加一个参数,指定要保留哪一个。可能的值为 'first'
、'last'
和 False
(这意味着重复索引的所有项目都将被删除)。默认值为'first'
。
您可以先删除没有值的记录,然后删除具有重复索引的项目。我不会以相反的顺序执行此操作,因为这样您就有删除包含数据的记录的风险,并保留没有数据的记录。
关于python - 如何删除空数据行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57537353/