【问题标题】:python 3 Delete row from csv based on Date Column (string format)python 3根据日期列从csv中删除行(字符串格式)
【发布时间】:2017-12-01 05:23:41
【问题描述】:

我试图用下面的方法来适应我的场景 - 但失败了

Pandas - Python, deleting rows based on Date column

我有一个包含以下列的 output.csv 文件

Customer, Alertkey, Node, Alertgroup, FirstOccurrence,
TKT_Flag, X733SpecificProb, TKT_TicketNumber, TKT_Keyword

该文件将每 7 天从数据库中以最近 7 天的数据增量更新一次

所以理想情况下,我必须从文件本身中删除前 7 天的数据。

我可以在下面写,但出现类型错误“TypeError:字符串索引必须是整数”

import pandas as pd
from dateutil.relativedelta import relativedelta
from dateutil import parser


df=pd.read_csv('output.csv', usecols=['FirstOccurrence'],parse_dates=[0])
df=df['FirstOccurrence'].iloc[0]
dt = parser.parse(df)
SevenDays = dt + relativedelta( days = +7 )
df=df[(parser.parse(df['FirstOccurrence']) < SevenDays)].drop(df.columns)

会有数百万行。我从 2016 年 1 月 1 日开始复制前几行。但这将是从 2016 年 1 月 1 日至今。每周它将追加并应删除前 7 天的记录 - 即第一次应删除 1 月 1 日至 1 月 6 日的记录,依此类推

Customer,Alertkey,Node,Alertgroup,FirstOccurrence,TKT_Flag,X733SpecificProb,TKT_TicketNumber,TKT_Keyword
Cust1,Cust1_11_53_Services_Warning,Node_Cust1,ITM_K53_SERVICEMON,2016-01-01 00:12:59,1005,TOLPUKC_OS:25223174,INC000014799786,CGMIDDLEWARE_MEDIUM_CONNECTDIRECT
Cust1,Cust1_11_53_Services_Warning,Node1_Cust1,ITM_K53_SERVICEMON,2016-01-01 00:12:59,1005,TOLPUKC_OS:25223175,INC000014799785,CGMIDDLEWARE_MEDIUM_CONNECTDIRECT
Cust2,Cust2_21_NT_System_CPU_Critical,Cust2_Node8,ITM_NT_System,2016-01-01 00:15:48,101,PARPFRC_OS:21192843,INC000000628410,WINDOWS_MEDIUM_DEFPRODUCTSILVER
Cust3,Cust3_10352_LZ_TDW_DISK_Critica,Cust3_Node22,ITM_Linux_Disk,2016-01-01 00:17:05,200,TOLPUKC_OS:25223370,INC000001412280,CGMOM_HIGH_DEFPRODUCT
Cust6,Cust6_11_53_Services_Warning,Cust6_Node700,ITM_K53_SERVICEMON,2016-01-01 00:22:36,22,TOLPUKC_OS:25223601,INC000002250120,CGIOWINTELIMOC_MEDIUM_DEFPRODUCT

【问题讨论】:

  • 请包含完整错误信息。
  • 您的代码说删除列而不是行?
  • 错误如下文件“C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py”,第 866 行,在运行文件 execfile(文件名,命名空间)文件“ C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py",第 102 行,在 execfile exec(compile(f.read(), filename, 'exec'), namespace) File" D:/Anirban_Backup/Drive_D/W0rk/Script/Python/DataBase_Connection/Delete_Rows_BasedOnTime.py",第 10 行,在 df=df[(parser.parse(df['FirstOccurrence'])
  • DYZ 错误如下文件“C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py”,第 866 行,在运行文件 execfile(文件名,命名空间)文件中“C:\ProgramData\Anaconda3\lib\site-packages\spyder\utils\site\sitecustomize.py”,第 102 行,在 execfile exec(compile(f.read(), filename, 'exec'), namespace) 文件中“D:/Anirban_Backup/Drive_D/W0rk/Script/Python/DataBase_Connection/Delete_Rows_BasedOnTime.py”,第 10 行,在 df=df[(parser.parse(df['FirstOccurrence'])

标签: python csv pandas datetime


【解决方案1】:

替换这个: df=df[(parser.parse(df['FirstOccurrence']) &lt; SevenDays)].drop(df.columns)

与: df = df.drop(df[(parser.parse(df['FirstOccurrence']) &lt; SevenDays)].index, inplace=True)

试试这个希望对你有帮助。

【讨论】:

  • df = df.drop(df[(parser.parse(df['FirstOccurrence'])
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-22
  • 2015-04-22
  • 2016-08-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多