1.類型轉換
import
pandas
as
pd
import
datetime
一般我們拿到日期型數據時,基本都是字符串表示的,該如何將其轉換為日期型和日期時間型。
法1:
dt
=
'2019/06/13 16:16:39'
d
=
'2017-04-24'
str2datetime
=
datetime
.
datetime
.
strptime
(
dt
,
'%Y/%m/%d %H:%M:%S'
)
str2date1
=
datetime
.
datetime
.
strptime
(
d
,
'%Y-%m-%d'
)
str2date2
=
datetime
.
datetime
.
strptime
(
d
,
'%Y-%m-%d'
)
.
date
(
)
print
(
str2datetime
)
print
(
str2date1
)
print
(
str2date2
)
2019-06-13 16:16:39
2017-04-24 00:00:00
2017-04-24
法2:
# 字符串轉換為時間格式
dt
=
pd
.
DataFrame
(
[
'2019/06/13 16:16:39'
,
'2019-03-02 23:12:23'
,
'2019-03-22 13:12:23'
,
'2019-05-02 15:12:30'
,
'2019-04-02 17:33:23'
,
'20/05/02'
]
)
print
(
dt
)
0
0 2019/06/13 16:16:39
1 2019-03-02 23:12:23
2 2019-03-22 13:12:23
3 2019-05-02 15:12:30
4 2019-04-02 17:33:23
5 20/05/02
dt
.
iloc
[
:
,
0
]
=
pd
.
to_datetime
(
dt
.
iloc
[
:
,
0
]
,
format
=
'%Y-%m-%d'
,
errors
=
'coerce'
)
# 將其他格式顯示成NaT
print
(
dt
)
0
0 2019-06-13 16:16:39
1 2019-03-02 23:12:23
2 2019-03-22 13:12:23
3 2019-05-02 15:12:30
4 2019-04-02 17:33:23
5 NaT
salesDf
=
dt
.
dropna
(
how
=
'any'
)
print
(
salesDf
)
0
0 2019-06-13 16:16:39
1 2019-03-02 23:12:23
2 2019-03-22 13:12:23
3 2019-05-02 15:12:30
4 2019-04-02 17:33:23
2.冗余數據刪除
1.刪除缺失值
dropna() 默認刪除含有缺失值的行,參數how = 'all’指刪除全部為空值的行
data3
=
pd
.
read_excel
(
io
=
r
'D:\BD\data3.xlsx'
)
data3
.
dtypes
id int64
gender object
age float64
edu object
custom_amt object
order_date object
dtype: object
data3
.
head
(
)
id | gender | age | edu | custom_amt | order_date | |
---|---|---|---|---|---|---|
0 | 890 | female | 43.0 | NaN | ¥2177.94 | 2018年12月25日 |
1 | 2391 | male | 52.0 | NaN | ¥2442.18 | 2017年5月24日 |
2 | 2785 | male | 39.0 | NaN | ¥849.79 | 2018年5月15日 |
3 | 1361 | female | 26.0 | NaN | ¥2482.22 | 2018年5月16日 |
4 | 888 | female | 61.0 | 本科 | ¥2027.9 | 2018年1月21日 |
上述數據中用戶id應為字符型,消費金額應為數值型,訂單日期應為日期型
# 用戶id轉換為字符型
data3
[
'id'
]
=
data3
[
'id'
]
.
astype
(
str
)
# 用戶消費金額轉換為數值型 ,消費金額中包含人民幣符號'¥',所以要從第二個元素開始截斷
data3
[
'custom_amt'
]
=
data3
[
'custom_amt'
]
.
str
[
1
:
]
.
astype
(
float
)
# 訂單日期轉換為日期型
data3
[
'order_date'
]
=
pd
.
to_datetime
(
data3
[
'order_date'
]
,
format
=
'%Y年%m月%d日'
)
2.刪除重復數據
data3.duplicated().any()
判斷數據中是否存在重復觀測,如果不加any(),則會返回一個與原數據行數相同的序列,使用了any()方法,則只返回一個值(True或False)
duplicated方法和drop_duplicates方法 都有一個重要的參數,默認情況下不設置該參數時,表示對數據的所有列進行重復性判斷,如果需要按照指定的變量做數據的重復性判斷時,就可以使用該參數指定具體的變量列表。
# 構造數據
df
=
pd
.
DataFrame
(
dict
(
name
=
[
'張三'
,
'李四'
,
'王二'
,
'張三'
,
'趙五'
,
'丁一'
,
'王二'
]
,
gender
=
[
'男'
,
'男'
,
'女'
,
'男'
,
'女'
,
'女'
,
'男'
]
,
age
=
[
29
,
25
,
27
,
29
,
21
,
22
,
27
]
,
income
=
[
15600
,
14000
,
18500
,
15600
,
10500
,
18000
,
13000
]
,
edu
=
[
'本科'
,
'本科'
,
'碩士'
,
'本科'
,
'大專'
,
'本科'
,
'碩士'
]
)
)
df
name | gender | age | income | edu | |
---|---|---|---|---|---|
0 | 張三 | 男 | 29 | 15600 | 本科 |
1 | 李四 | 男 | 25 | 14000 | 本科 |
2 | 王二 | 女 | 27 | 18500 | 碩士 |
3 | 張三 | 男 | 29 | 15600 | 本科 |
4 | 趙五 | 女 | 21 | 10500 | 大專 |
5 | 丁一 | 女 | 22 | 18000 | 本科 |
6 | 王二 | 男 | 27 | 13000 | 碩士 |
# 默認情況下,對每行所有變量進行判斷,刪除第二條重復行,刪除第二行的張三
df
.
drop_duplicates
(
)
name | gender | age | income | edu | |
---|---|---|---|---|---|
0 | 張三 | 男 | 29 | 15600 | 本科 |
1 | 李四 | 男 | 25 | 14000 | 本科 |
2 | 王二 | 女 | 27 | 18500 | 碩士 |
4 | 趙五 | 女 | 21 | 10500 | 大專 |
5 | 丁一 | 女 | 22 | 18000 | 本科 |
6 | 王二 | 男 | 27 | 13000 | 碩士 |
# 根據用戶姓名和年齡來刪除重復值
df
.
drop_duplicates
(
subset
=
[
'name'
,
'age'
]
)
name | gender | age | income | edu | |
---|---|---|---|---|---|
0 | 張三 | 男 | 29 | 15600 | 本科 |
1 | 李四 | 男 | 25 | 14000 | 本科 |
2 | 王二 | 女 | 27 | 18500 | 碩士 |
4 | 趙五 | 女 | 21 | 10500 | 大專 |
5 | 丁一 | 女 | 22 | 18000 | 本科 |
使用drop_duplicates方法刪除重復數據,并不能直接影響到原始數據,即原始數據中還是存在重復觀測的,若使用inplace = True,則會用刪除后的數據替換原始數據
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
