我有一个.txt。文件如下所示:
Name 1
@Name( ) Value WATER WHP
Date Unit Unit Unit
-------------- ---------- ---------- ---------- ----------
Name 1 20081220 2900.00 0.00 3300.00
Name 1 20081221 0.00 0.00 3390.00
Name 1 20081222 2500.00 0.00 2802.00
Name 1 20081223 0.00 0.00 3022.00
Name 1 20081224 0.00 0.00 3022.00
我使用以下代码导入python:
df = pd.read_csv(r'test_prd.txt', skiprows=6, engine="python", header=None)
df.columns = ['Test']
df.drop(df.tail(1).index, inplace = True) # because of file format
df = df.Test.str.split(expand=True)
df.rename(columns ={0:'Name', 1:'Number', 2:'Date', 3:'Value', 4:'Water', 5:'WHP'}
,inplace=True)
df['Date'] = pd.to_datetime(df['Date']).dt.floor('D').dt.strftime('%Y-%m-%d')
df['Note'] = (df['Value']).apply(lambda x: 'yes' if x==0 else '')
del df['Water']
del df['WHP']
df['Name'] = df['Name'].astype(str) + ' ' + df['Number'].astype(str)
del df['Number']
使用此代码后,数据框如下所示:
Name Date Value Note
0 Name 1 2008-12-20 2900.00
1 Name 1 2008-12-21 0.00 Yes
2 Name 1 2008-12-22 2500.00
3 Name 1 2008-12-23 0.00 Yes
4 Name 1 2008-12-24 0.00 Yes
... ... ... ... ...
78 Name 2009-03-15 0.00 Yes
79 Name 2009-03-16 3000.00
80 Name 2009-03-17 0.00 Yes
... ... ... ... ...
我想打印“值”列等于零的时间段(开始日期 - 结束日期),即当“注意”=是时。可以从数据框中删除值非零的任何其他行。如果有一个独立的零值(前后是一个非零值),则开始日期和结束日期将相同。
预期的输出应如下所示:
Name Start Date End Date Value Note
1 Name 2008-12-21 2008-12-21 0.00 Yes
2 Name 2008-12-23 2009-03-15 0.00 Yes
3 Name 2009-03-17 *** 0.00 Yes
... ... ... ... ...
我试图使用条件 if 语句或 df.loc 但我对 Python 的了解不足以将它们组合在一起。任何意见,将不胜感激。