前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >数据清洗之 日期格式数据处理

数据清洗之 日期格式数据处理

原创
作者头像
ruochen
修改2021-05-13 14:33:20
1.3K0
修改2021-05-13 14:33:20
举报
文章被收录于专栏:若尘的技术专栏

日期格式数据处理

  • Pandas中使用to_datetime()方法将文本格式转换为日期格式
  • dataframe数据类型如果为datetime64,可以使用dt方法取出年月日等
  • 对于时间差数据,可以使用timedelta函数将其转换为指定时间单位的数值
  • 时间差数据,可以使用dt方法访问其常用属性
代码语言:txt
复制
import pandas as pd
import numpy as np
import os
代码语言:txt
复制
os.getcwd()
代码语言:txt
复制
'D:\\Jupyter\\notebook\\Python数据清洗实战\\数据清洗之数据转换'
代码语言:txt
复制
os.chdir('D:\\Jupyter\\notebook\\Python数据清洗实战\\数据')
代码语言:txt
复制
df = pd.read_csv('baby_trade_history.csv', encoding='utf-8', dtype={'user_id':str})
代码语言:txt
复制
df.head(5)

<div>

<style scoped>

代码语言:txt
复制
.dataframe tbody tr th:only-of-type {
代码语言:txt
复制
    vertical-align: middle;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe tbody tr th {
代码语言:txt
复制
    vertical-align: top;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe thead th {
代码语言:txt
复制
    text-align: right;
代码语言:txt
复制
}

</style>

<table border="1" class="dataframe">

<thead>

代码语言:txt
复制
<tr style="text-align: right;">
代码语言:txt
复制
  <th></th>
代码语言:txt
复制
  <th>user_id</th>
代码语言:txt
复制
  <th>auction_id</th>
代码语言:txt
复制
  <th>cat_id</th>
代码语言:txt
复制
  <th>cat1</th>
代码语言:txt
复制
  <th>property</th>
代码语言:txt
复制
  <th>buy_mount</th>
代码语言:txt
复制
  <th>day</th>
代码语言:txt
复制
</tr>

</thead>

<tbody>

代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>0</th>
代码语言:txt
复制
  <td>786295544</td>
代码语言:txt
复制
  <td>41098319944</td>
代码语言:txt
复制
  <td>50014866</td>
代码语言:txt
复制
  <td>50022520</td>
代码语言:txt
复制
  <td>21458:86755362;13023209:3593274;10984217:21985...</td>
代码语言:txt
复制
  <td>2</td>
代码语言:txt
复制
  <td>20140919</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>1</th>
代码语言:txt
复制
  <td>532110457</td>
代码语言:txt
复制
  <td>17916191097</td>
代码语言:txt
复制
  <td>50011993</td>
代码语言:txt
复制
  <td>28</td>
代码语言:txt
复制
  <td>21458:11399317;1628862:3251296;21475:137325;16...</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>20131011</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>2</th>
代码语言:txt
复制
  <td>249013725</td>
代码语言:txt
复制
  <td>21896936223</td>
代码语言:txt
复制
  <td>50012461</td>
代码语言:txt
复制
  <td>50014815</td>
代码语言:txt
复制
  <td>21458:30992;1628665:92012;1628665:3233938;1628...</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>20131011</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>3</th>
代码语言:txt
复制
  <td>917056007</td>
代码语言:txt
复制
  <td>12515996043</td>
代码语言:txt
复制
  <td>50018831</td>
代码语言:txt
复制
  <td>50014815</td>
代码语言:txt
复制
  <td>21458:15841995;21956:3494076;27000458:59723383...</td>
代码语言:txt
复制
  <td>2</td>
代码语言:txt
复制
  <td>20141023</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>4</th>
代码语言:txt
复制
  <td>444069173</td>
代码语言:txt
复制
  <td>20487688075</td>
代码语言:txt
复制
  <td>50013636</td>
代码语言:txt
复制
  <td>50008168</td>
代码语言:txt
复制
  <td>21458:30992;13658074:3323064;1628665:3233941;1...</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>20141103</td>
代码语言:txt
复制
</tr>

</tbody>

</table>

</div>

代码语言:txt
复制
df.info()
代码语言:txt
复制
<class 'pandas.core.frame.DataFrame'>
代码语言:txt
复制
RangeIndex: 29971 entries, 0 to 29970
代码语言:txt
复制
Data columns (total 7 columns):
代码语言:txt
复制
user_id       29971 non-null object
代码语言:txt
复制
auction_id    29971 non-null int64
代码语言:txt
复制
cat_id        29971 non-null int64
代码语言:txt
复制
cat1          29971 non-null int64
代码语言:txt
复制
property      29827 non-null object
代码语言:txt
复制
buy_mount     29971 non-null int64
代码语言:txt
复制
day           29971 non-null int64
代码语言:txt
复制
dtypes: int64(5), object(2)
代码语言:txt
复制
memory usage: 1.6+ MB
代码语言:txt
复制
df['buy_date'] = pd.to_datetime(df['day'], format='%Y%m%d', errors='coerce')
代码语言:txt
复制
df.info()
代码语言:txt
复制
<class 'pandas.core.frame.DataFrame'>
代码语言:txt
复制
RangeIndex: 29971 entries, 0 to 29970
代码语言:txt
复制
Data columns (total 8 columns):
代码语言:txt
复制
user_id       29971 non-null object
代码语言:txt
复制
auction_id    29971 non-null int64
代码语言:txt
复制
cat_id        29971 non-null int64
代码语言:txt
复制
cat1          29971 non-null int64
代码语言:txt
复制
property      29827 non-null object
代码语言:txt
复制
buy_mount     29971 non-null int64
代码语言:txt
复制
day           29971 non-null int64
代码语言:txt
复制
buy_date      29971 non-null datetime64[ns]
代码语言:txt
复制
dtypes: datetime64[ns](1), int64(5), object(2)
代码语言:txt
复制
memory usage: 1.8+ MB
代码语言:txt
复制
df.head(5)

<div>

<style scoped>

代码语言:txt
复制
.dataframe tbody tr th:only-of-type {
代码语言:txt
复制
    vertical-align: middle;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe tbody tr th {
代码语言:txt
复制
    vertical-align: top;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe thead th {
代码语言:txt
复制
    text-align: right;
代码语言:txt
复制
}

</style>

<table border="1" class="dataframe">

<thead>

代码语言:txt
复制
<tr style="text-align: right;">
代码语言:txt
复制
  <th></th>
代码语言:txt
复制
  <th>user_id</th>
代码语言:txt
复制
  <th>auction_id</th>
代码语言:txt
复制
  <th>cat_id</th>
代码语言:txt
复制
  <th>cat1</th>
代码语言:txt
复制
  <th>property</th>
代码语言:txt
复制
  <th>buy_mount</th>
代码语言:txt
复制
  <th>day</th>
代码语言:txt
复制
  <th>buy_date</th>
代码语言:txt
复制
</tr>

</thead>

<tbody>

代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>0</th>
代码语言:txt
复制
  <td>786295544</td>
代码语言:txt
复制
  <td>41098319944</td>
代码语言:txt
复制
  <td>50014866</td>
代码语言:txt
复制
  <td>50022520</td>
代码语言:txt
复制
  <td>21458:86755362;13023209:3593274;10984217:21985...</td>
代码语言:txt
复制
  <td>2</td>
代码语言:txt
复制
  <td>20140919</td>
代码语言:txt
复制
  <td>2014-09-19</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>1</th>
代码语言:txt
复制
  <td>532110457</td>
代码语言:txt
复制
  <td>17916191097</td>
代码语言:txt
复制
  <td>50011993</td>
代码语言:txt
复制
  <td>28</td>
代码语言:txt
复制
  <td>21458:11399317;1628862:3251296;21475:137325;16...</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>20131011</td>
代码语言:txt
复制
  <td>2013-10-11</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>2</th>
代码语言:txt
复制
  <td>249013725</td>
代码语言:txt
复制
  <td>21896936223</td>
代码语言:txt
复制
  <td>50012461</td>
代码语言:txt
复制
  <td>50014815</td>
代码语言:txt
复制
  <td>21458:30992;1628665:92012;1628665:3233938;1628...</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>20131011</td>
代码语言:txt
复制
  <td>2013-10-11</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>3</th>
代码语言:txt
复制
  <td>917056007</td>
代码语言:txt
复制
  <td>12515996043</td>
代码语言:txt
复制
  <td>50018831</td>
代码语言:txt
复制
  <td>50014815</td>
代码语言:txt
复制
  <td>21458:15841995;21956:3494076;27000458:59723383...</td>
代码语言:txt
复制
  <td>2</td>
代码语言:txt
复制
  <td>20141023</td>
代码语言:txt
复制
  <td>2014-10-23</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>4</th>
代码语言:txt
复制
  <td>444069173</td>
代码语言:txt
复制
  <td>20487688075</td>
代码语言:txt
复制
  <td>50013636</td>
代码语言:txt
复制
  <td>50008168</td>
代码语言:txt
复制
  <td>21458:30992;13658074:3323064;1628665:3233941;1...</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>20141103</td>
代码语言:txt
复制
  <td>2014-11-03</td>
代码语言:txt
复制
</tr>

</tbody>

</table>

</div>

代码语言:txt
复制
# 使用dt方法提取属性
# df['buy_date'].dt.year  # 提取年
# df['buy_date'].dt.month  # 提取月
# df['buy_date'].dt.day  # 提取天
代码语言:txt
复制
df['diff_day'] = pd.datetime.now() - df['buy_date']  # 时间差格式
代码语言:txt
复制
df.head(5)

<div>

<style scoped>

代码语言:txt
复制
.dataframe tbody tr th:only-of-type {
代码语言:txt
复制
    vertical-align: middle;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe tbody tr th {
代码语言:txt
复制
    vertical-align: top;
代码语言:txt
复制
}
代码语言:txt
复制
.dataframe thead th {
代码语言:txt
复制
    text-align: right;
代码语言:txt
复制
}

</style>

<table border="1" class="dataframe">

<thead>

代码语言:txt
复制
<tr style="text-align: right;">
代码语言:txt
复制
  <th></th>
代码语言:txt
复制
  <th>user_id</th>
代码语言:txt
复制
  <th>auction_id</th>
代码语言:txt
复制
  <th>cat_id</th>
代码语言:txt
复制
  <th>cat1</th>
代码语言:txt
复制
  <th>property</th>
代码语言:txt
复制
  <th>buy_mount</th>
代码语言:txt
复制
  <th>day</th>
代码语言:txt
复制
  <th>buy_date</th>
代码语言:txt
复制
  <th>diff_day</th>
代码语言:txt
复制
</tr>

</thead>

<tbody>

代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>0</th>
代码语言:txt
复制
  <td>786295544</td>
代码语言:txt
复制
  <td>41098319944</td>
代码语言:txt
复制
  <td>50014866</td>
代码语言:txt
复制
  <td>50022520</td>
代码语言:txt
复制
  <td>21458:86755362;13023209:3593274;10984217:21985...</td>
代码语言:txt
复制
  <td>2</td>
代码语言:txt
复制
  <td>20140919</td>
代码语言:txt
复制
  <td>2014-09-19</td>
代码语言:txt
复制
  <td>2034 days 22:32:35.614788</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>1</th>
代码语言:txt
复制
  <td>532110457</td>
代码语言:txt
复制
  <td>17916191097</td>
代码语言:txt
复制
  <td>50011993</td>
代码语言:txt
复制
  <td>28</td>
代码语言:txt
复制
  <td>21458:11399317;1628862:3251296;21475:137325;16...</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>20131011</td>
代码语言:txt
复制
  <td>2013-10-11</td>
代码语言:txt
复制
  <td>2377 days 22:32:35.614788</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>2</th>
代码语言:txt
复制
  <td>249013725</td>
代码语言:txt
复制
  <td>21896936223</td>
代码语言:txt
复制
  <td>50012461</td>
代码语言:txt
复制
  <td>50014815</td>
代码语言:txt
复制
  <td>21458:30992;1628665:92012;1628665:3233938;1628...</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>20131011</td>
代码语言:txt
复制
  <td>2013-10-11</td>
代码语言:txt
复制
  <td>2377 days 22:32:35.614788</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>3</th>
代码语言:txt
复制
  <td>917056007</td>
代码语言:txt
复制
  <td>12515996043</td>
代码语言:txt
复制
  <td>50018831</td>
代码语言:txt
复制
  <td>50014815</td>
代码语言:txt
复制
  <td>21458:15841995;21956:3494076;27000458:59723383...</td>
代码语言:txt
复制
  <td>2</td>
代码语言:txt
复制
  <td>20141023</td>
代码语言:txt
复制
  <td>2014-10-23</td>
代码语言:txt
复制
  <td>2000 days 22:32:35.614788</td>
代码语言:txt
复制
</tr>
代码语言:txt
复制
<tr>
代码语言:txt
复制
  <th>4</th>
代码语言:txt
复制
  <td>444069173</td>
代码语言:txt
复制
  <td>20487688075</td>
代码语言:txt
复制
  <td>50013636</td>
代码语言:txt
复制
  <td>50008168</td>
代码语言:txt
复制
  <td>21458:30992;13658074:3323064;1628665:3233941;1...</td>
代码语言:txt
复制
  <td>1</td>
代码语言:txt
复制
  <td>20141103</td>
代码语言:txt
复制
  <td>2014-11-03</td>
代码语言:txt
复制
  <td>1989 days 22:32:35.614788</td>
代码语言:txt
复制
</tr>

</tbody>

</table>

</div>

代码语言:txt
复制
df.dtypes
代码语言:txt
复制
user_id                object
代码语言:txt
复制
auction_id              int64
代码语言:txt
复制
cat_id                  int64
代码语言:txt
复制
cat1                    int64
代码语言:txt
复制
property               object
代码语言:txt
复制
buy_mount               int64
代码语言:txt
复制
day                     int64
代码语言:txt
复制
buy_date       datetime64[ns]
代码语言:txt
复制
diff_day      timedelta64[ns]
代码语言:txt
复制
dtype: object
代码语言:txt
复制
# 使用dt方法提取属性
# df['diff_day'].dt.days  # 提取天数
# df['diff_day'].dt.seconds  # 提取秒
# df['diff_day'].dt.microseconds  # 提取纳秒
代码语言:txt
复制
# 将时间差转换为规定的格式
df['时间差'] = df['diff_day']/pd.Timedelta('1 D')  # 转换为天数
代码语言:txt
复制
df['时间差'].head(5)
代码语言:txt
复制
0    2034.939301
代码语言:txt
复制
1    2377.939301
代码语言:txt
复制
2    2377.939301
代码语言:txt
复制
3    2000.939301
代码语言:txt
复制
4    1989.939301
代码语言:txt
复制
Name: 时间差, dtype: float64
代码语言:txt
复制
df['时间差'] = df['diff_day']/pd.Timedelta('1 H')  # 转换为小时
代码语言:txt
复制
df['时间差'].head(5)
代码语言:txt
复制
0    48838.543226
代码语言:txt
复制
1    57070.543226
代码语言:txt
复制
2    57070.543226
代码语言:txt
复制
3    48022.543226
代码语言:txt
复制
4    47758.543226
代码语言:txt
复制
Name: 时间差, dtype: float64
代码语言:txt
复制
df['时间差'] = df['diff_day']/pd.Timedelta('1 M')  # 转换为分钟数
代码语言:txt
复制
df['时间差'].head(5)
代码语言:txt
复制
0    2.930313e+06
代码语言:txt
复制
1    3.424233e+06
代码语言:txt
复制
2    3.424233e+06
代码语言:txt
复制
3    2.881353e+06
代码语言:txt
复制
4    2.865513e+06
代码语言:txt
复制
Name: 时间差, dtype: float64
代码语言:txt
复制
# 将科学计数转换为小数
df['时间差'].head(5).round(decimals=3)
代码语言:txt
复制
0    2930312.594
代码语言:txt
复制
1    3424232.594
代码语言:txt
复制
2    3424232.594
代码语言:txt
复制
3    2881352.594
代码语言:txt
复制
4    2865512.594
代码语言:txt
复制
Name: 时间差, dtype: float64
代码语言:txt
复制
# D: 天  M: 月  Y: 年
# 转换为天数
df['diff_day'].astype('timedelta64[D]').head(5)
代码语言:txt
复制
0    2034.0
代码语言:txt
复制
1    2377.0
代码语言:txt
复制
2    2377.0
代码语言:txt
复制
3    2000.0
代码语言:txt
复制
4    1989.0
代码语言:txt
复制
Name: diff_day, dtype: float64
代码语言:txt
复制
# 转换为月数
df['diff_day'].astype('timedelta64[M]').head(5)
代码语言:txt
复制
0    66.0
代码语言:txt
复制
1    78.0
代码语言:txt
复制
2    78.0
代码语言:txt
复制
3    65.0
代码语言:txt
复制
4    65.0
代码语言:txt
复制
Name: diff_day, dtype: float64
代码语言:txt
复制
# 转换为年数
df['diff_day'].astype('timedelta64[Y]').head(5)
代码语言:txt
复制
0    5.0
代码语言:txt
复制
1    6.0
代码语言:txt
复制
2    6.0
代码语言:txt
复制
3    5.0
代码语言:txt
复制
4    5.0
代码语言:txt
复制
Name: diff_day, dtype: float64
代码语言:txt
复制
# 转换为小时
# 还可转换为分钟、秒等等
df['diff_day'].astype('timedelta64[h]').head(5)
代码语言:txt
复制
0    48838.0
代码语言:txt
复制
1    57070.0
代码语言:txt
复制
2    57070.0
代码语言:txt
复制
3    48022.0
代码语言:txt
复制
4    47758.0
代码语言:txt
复制
Name: diff_day, dtype: float64

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 日期格式数据处理
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档