Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否可以使用日期参数pd.read_csv数据?_Python_Pandas - Fatal编程技术网

Python 是否可以使用日期参数pd.read_csv数据?

Python 是否可以使用日期参数pd.read_csv数据?,python,pandas,Python,Pandas,对我来说,远程工作意味着访问服务器上的大型CSV文件,这需要很长时间才能下载到本地硬盘 我尝试使用一点Python来加速这个过程,只阅读我需要的特定专栏。然而,在理想情况下,如果我只能在某个日期(例如>2019-01-04)后读取这些列的数据,则会显著减少数据量 我的现有代码将在total文件中读取,然后应用日期过滤器。我只是想知道是否有可能首先将日期过滤器应用于文件的读取。我明白这可能是不可能的 代码,例如 import pandas as pd fields = ['a','b','c'.

对我来说,远程工作意味着访问服务器上的大型CSV文件,这需要很长时间才能下载到本地硬盘

我尝试使用一点Python来加速这个过程,只阅读我需要的特定专栏。然而,在理想情况下,如果我只能在某个日期(例如>2019-01-04)后读取这些列的数据,则会显著减少数据量

我的现有代码将在total文件中读取,然后应用日期过滤器。我只是想知道是否有可能首先将日期过滤器应用于文件的读取。我明白这可能是不可能的

代码,例如

import pandas as pd

fields = ['a','b','c'...]
data1 = pd.read_csv(r'SomeForeignDrive.csv', error_bad_lines=False,usecols=fields)
data1['c']=pd.to_datetime(data1['c'], errors='coerce')
data1.dropna()
data1 = data1[data1['c'] > '2019-01-04']
data1.to_csv(r'SomeLocalDrive.csv')

无法从特定日期开始读取文件,但可以使用以下解决方法。您只能读取带有日期的列,并找到要从中开始的行索引。然后可以读取整个文件并跳过开始索引之前的所有行:

df = pd.read_csv('path', usecols=['date'])
df['date'] = pd.to_datetime(df['date'])
idx = df[df['date'] > '2019-01-04'].index[0]

df = pd.read_csv('path', skiprows=idx)
读取\u csv
文档:

使用此参数(usecols)可以大大加快解析时间和速度 降低内存使用率


我建议首先只阅读列
'c'
usecols=['c']
),使用
parse_dates=['c']
,应用过滤器获取索引,然后使用
skiprows=match_index
再次读取文件。如果您正在执行的所有操作都已完成,则只需使用
open
打开文件,检查日期条件并将其附加到新的file@SayandipDutta这不是意味着要读取文件两次吗?首先,我们需要迭代hole csv以获得所有行以确定所需行,再次?@Epsi95在某种程度上读取文件两次,是的,但仅读取一列将花费更多时间和内存效率。csv按行存储,因此读取特定列需要读取所有内容,不是吗?谢谢,这很简洁。我试试看。