从 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 Reader zip匹配与组装