【发布时间】:2016-12-10 05:03:52
【问题描述】:
我想读取一个 csv 文件并将这个文件存储在 pandas 数据帧中,之后我想检查一列值是否等于常量变量,并且相等的行应该保存在单独的数据帧中。
下一步是从单独的数据框中更新一列。在这一步中,我将遍历整个数据框并更新特定列的所有行,因此这将花费太多时间,因为我的数据框有数千行。
Input.csv-
line_no,time
205,1467099122677889
205,1467099122677889
206,1467099363719028
207,1467099363818373
207,1467099363918360
208,1467099363818373
210,1467099363958749
程序-
import pandas as pd
if __name__ == "__main__":
file_path = 'Input.csv'
input_line_no = 205
pd_dataframe = pd.read_csv(file_path,delimiter=',',keep_default_na=False)
match_df = pd.DataFrame(pd_dataframe.loc[pd_dataframe['line_no'] == int(input_line_no)])
if match_df.empty:
print 'Given line no is not present in dataframe.'
sys.exit(1)
match_df = match_df.applymap(str)
for index in range(0,len(match_df.index)):
epoch_time = match_df.iloc[index]['time']
stamp = int(str(epoch_time)+'0')
date = datetime.datetime.fromtimestamp(stamp / 10000000.0).strftime('%H:%M:%S %f')[:-3]
match_df['time'].apply(str)
match_df.iloc[index]['time'] = date
print match_df.to_csv(index=False)
这个时间列是在纪元时间我想把它转换成人类可读的时间戳,所以逻辑只用于这个目的。
但我正面临与此任务有关的执行时间问题。是 还有其他方法可以更快地更新现有数据框的列吗?
【问题讨论】:
-
如果使用
date = datetime.datetime.fromtimestamp(stamp / 10000000.0),则返回2434-11-27 04:20:26.778889。这样对吗?还是2016-06-28 07:32:02? -
@jezrael - 是的,它是正确的,不用担心。我只想知道如何减少数据框更新列的执行时间?
标签: python csv pandas indexing dataframe