从 csv.reader 之后的列(Python Pandas)中获取最早的日期

Posted

技术标签:

【中文标题】从 csv.reader 之后的列(Python Pandas)中获取最早的日期【英文标题】:Get the earliest date from a column (Python Pandas) after csv.reader 【发布时间】:2018-04-01 13:44:34 【问题描述】:

我从一个包含多列的 CSV 文件中加载了一些数据。在我的 csv.reader 中,我有一个 IF 函数。我正在尝试从特定列(开始日期)中获取最早的日期。

我先加载数据:

for row in csv.reader(open('myFile.csv')):
  if row[4] == '56886':
    key = row[4] #key = (row[4], row[33][:4], row[4])
    startDate = row[19]

当我打印列 (startDate) 时,我得到这个:

01) 我尝试使用以下内容:

content = min(content)
print(content)

我在终端得到了这个:

02) 然后我尝试更改我的代码:

for row in csv.reader(open('myFile.csv',
        parse_dates=['Start Date'], 
        usecols=['Start Date']))
  if row[4] == '56886':
    key = row[4] #key = (row[4], row[33][:4], row[4])
    startDate = row[19]

我得到一个无效语法错误。

03) 我尝试将行更改为:

pandas.read_csv('myFile.csv', parse_dates=['Start Date'], usecols=['Start Date'])

我也遇到了同样的错误。

最好的解决方法是什么?到目前为止我还没有找到解决方案。

【问题讨论】:

使用pandas,你可以使用pd.to_datetime(df["Start Date"])转换一整列 【参考方案1】:

我认为您需要boolean indexing 进行过滤:

#dont filter all columns by usecols    
df = pd.read_csv('file', parse_dates=['Start Date', 'End Date']) #columns to datetimes

#filter output first by column ID and then get min and max
a = df.loc[ df['ID'] == 56886, 'Start Date'].min()


b = df.loc[ df['ID'] == 56886, 'End Date'].max()

【讨论】:

【参考方案2】:

使用 pandas 转换单个项目的示例:

pd.to_datetime("08/27/2017")

使用 pandas 转换一个字符串列表的示例:

times = []
for i in range(30):
    times.append(str(i+1)+"/01/2016")
datetimes = pd.to_datetime(times)
min(datetimes )

【讨论】:

以上是关于从 csv.reader 之后的列(Python Pandas)中获取最早的日期的主要内容,如果未能解决你的问题,请参考以下文章

在python中使用单独的列将终端输出到csv

在 Python 中覆盖 CSV 中的列

Python数据清洗之csv Reader zip匹配与组装

Python csv文件到数据字典多个键

使用 Python csv.reader 从文本文件中删除 html 格式“>”

如何在 Python 中为 csv.reader 设置语言环境?