Python – 如何使用pandas编辑基于另一个CSV的CSV

我希望有人能帮帮忙。

我处于需要根据另一个CSV从一个CSV文件中删除行的情况。 考虑这个简单的例子:

Time Some Column 4/25/2016 06:20:00 A 4/25/2016 06:20:01 B 4/25/2016 06:20:02 B 4/25/2016 06:20:03 B 4/25/2016 06:20:04 A 4/25/2016 06:20:05 A 

然后我有另一个文件:

 Time Block 4/25/2016 06:20:00 Block B for 10 seconds 

我应该可以使用第二个文件,并将其读入我的程序中,以便在6:20:00之后删除'Some Column'中有'B'的任何行10秒,因此实际上我需要一些函数这将看第一个和第二个CSV文件,并为我产生这个:

 Time Some Column 4/25/2016 06:20:00 A 4/25/2016 06:20:04 A 4/25/2016 06:20:05 A 

请注意,我正在处理的CSV有超过三百万行,所以使用像openpyxl这样慢的东西并不是一个真正的select,任何想法?

你可以这样做的一个方法是使用pd.merge_asof来帮助10秒间隔。 在Time上将两个文件合并在一起,等于pd.Timedelta(10, unit='s')过滤file1到只有'B'。 从file1中删除从merge_asof返回的logging。

 from io import StringIO csv_file1 = StringIO("""Time Some Column 4/25/2016 06:20:00 A 4/25/2016 06:20:01 B 4/25/2016 06:20:02 B 4/25/2016 06:20:03 B 4/25/2016 06:20:04 A 4/25/2016 06:20:05 A""") csv_file2 = StringIO("""Time Block 4/25/2016 06:20:00 Block B for 10 seconds""") df1 = pd.read_csv(csv_file1, sep='\s\s+', index_col='Time', engine='python', parse_dates=True) df2 = pd.read_csv(csv_file2, sep='\s\s+', index_col='Time', engine='python', parse_dates=True) df_out = (df1.drop(pd.merge_asof(df1[df1['Some Column'] == 'B'], df2, right_index=True, left_index=True, tolerance=pd.Timedelta(10, unit='s')).index)) print(df_out.reset_index()) 

输出:

  Time Some Column 0 2016-04-25 06:20:00 A 1 2016-04-25 06:20:04 A 2 2016-04-25 06:20:05 A