如何使用Python从pandas数据框中提取日期?

时间:2017-07-10 19:49:42

标签: python pandas

我使用Pandas创建了以下数据框:

         Name       BirthDay            
0        Alex     1985-01-01
1        John     1977-01-01
2        Rick     1992-01-01

我需要使用每列的值创建单独的列表。所以我做了以下几点:

names = []
birthdays = []
while i < len(df.index):
    name = "".join(df['Name'].iloc[i])
    birthDay= "".join(df['BirthDay'].iloc[i])
    names.append(name)
    bithdays.append(birthDay)
    i += 1

代码可以正常使用名称填充第一个列表,但是在尝试提取日期时会抛出此错误:

TypeError: can only join an iterable

我怎么做错了?

2 个答案:

答案 0 :(得分:2)

如果需要将datetime转换为string s,我认为您需要Series.tolist和转换日期时间strftime

names = df['Name'].tolist()
print (names)
['Alex', 'John', 'Rick']

birthdays = df['BirthDay'].dt.strftime('%Y-%m-%d').tolist()
print (birthdays)
['1985-01-01', '1977-01-01', '1992-01-01']

替代解决方案投射到str

birthdays = df['BirthDay'].astype(str).tolist()
print (birthdays)
['1985-01-01', '1977-01-01', '1992-01-01']

如果列表中需要时间戳(pandas datetimes):

birthdays = df['BirthDay'].tolist()
print (birthdays)
[Timestamp('1985-01-01 00:00:00'), Timestamp('1977-01-01 00:00:00'),
 Timestamp('1992-01-01 00:00:00')]

对于python日期和日期时间,请使用dateto_pydatetime

birthdays = df['BirthDay'].dt.date.tolist()
print (birthdays)
[datetime.date(1985, 1, 1), datetime.date(1977, 1, 1), datetime.date(1992, 1, 1)]

birthdays = df['BirthDay'].dt.to_pydatetime()
print (birthdays)
[datetime.datetime(1985, 1, 1, 0, 0) datetime.datetime(1977, 1, 1, 0, 0)
 datetime.datetime(1992, 1, 1, 0, 0)]

感谢cᴏʟᴅsᴘᴇᴇᴅScott Boston提供意见。

答案 1 :(得分:0)

您也可以使用pandas.Series.values

names = df.Name.values
birthdays = df.BirthDay.astype(str).values