更新的问题
我正在尝试使用Python(最好是Pandas)对csv的两个日期列中的日期进行排序。对于第一个,我希望得到最早的日期。对于第二个,我想得到最新的一个。
我的静态列表代码运行正常:
timestamps = ['08/04/2017', '08/09/2017', '08/03/2017']
sortedDates = timestamps.sort(key=lambda x: time.mktime(time.strptime(x,"%m/%d/%Y")))
01)首先我加载数据
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]
xxxxx[key] = xxxxx.setdefault(key, 0) + float(row[33])
02)然后我尝试对开始日期进行排序
df = pandas.read_csv('Bionic.csv', parse_dates=['Start Date'])
df2 = df.dropna(subset=["Start Date"])
df2['Start Date'].apply(lambda x: time.mktime(time.strptime(x,"%m/%d/%Y")))
print(df2)
我收到此错误:
sys:1:DtypeWarning:列(10,51,60,68,74)具有混合类型。 在导入时指定dtype选项或设置low_memory = False。
03)然后我尝试了这个:
df = pandas.read_csv('myFile.csv', parse_dates=['Start Date'])
df = df.applymap(lambda x: np.nan if isinstance(x, basestring) and x.isspace() else x)
我收到同样的错误。
04)当我尝试这个时,我得到了"无"值,因为此列有空字段:
startDate = startDate.split()
minStartDate = startDate.sort(key=lambda x: time.mktime(time.strptime(x,"%m/%d/%Y")))
print(minStartDate)
答案 0 :(得分:2)
使用to_datetime
:
df['Start Date'] = pd.to_datetime(df['Start Date'])
如果上述行不起作用:
df['Start Date'] = pd.to_datetime(df['Start Date'], errors='coerce')
另一个解决方案是使用参数parse_dates
:
df = pandas.read_csv('myFile.csv', parse_dates=['Start Date'])
编辑:
您可以使用:
df = pd.read_csv('Bionic.csv',
parse_dates=['Start Date', 'End Date'], #columns to datetimes
usecols=['Start Date', 'End Date']) #filter columns only
print (df.head())
Start Date End Date
0 NaT NaT
1 NaT NaT
2 NaT NaT
3 NaT NaT
4 NaT NaT
#get oldiest date
a = df['Start Date'].min()
print (a)
2001-10-24 00:00:00
#get most recent date
b = df['End Date'].max()
print (b)
2018-08-27 00:00:00
答案 1 :(得分:1)
您的数据框列中必须有nan
。数据框中的nan
是浮点类型。
您需要处理所有这些nan
值。
一旦你处理完所有的nan值,你就可以使用你的第二段代码,它应该可以正常工作。