欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

首頁綜合 正文
目錄

柚子快報(bào)邀請碼778899分享:Pandas數(shù)據(jù)類型

柚子快報(bào)邀請碼778899分享:Pandas數(shù)據(jù)類型

http://yzkb.51969.com/

Pandas數(shù)據(jù)類型

學(xué)習(xí)目標(biāo)

知道Pandas中都有哪些數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu),并知道數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)之間的關(guān)系知道時間日期類型作為索引的數(shù)據(jù)集可以基于時間范圍來選取子集知道時間差類型索引的數(shù)據(jù)集可以基于時間差范圍來選取子集

1 一般類型

Pandas數(shù)據(jù)類型Python類型說明objectstr字符串int64int整數(shù)float64float浮點(diǎn)數(shù)boolbool布爾值category無原生類型分類類型datetime無原生類型時間日期類型timedelta無原生類型時間差類型

pandas是基于numpy構(gòu)建的包,所以pandas中的數(shù)據(jù)類型都是基于Numpy中的ndarray類型實(shí)現(xiàn)的 Pandas中的數(shù)據(jù)結(jié)構(gòu)對象和數(shù)據(jù)類型對象:

dataframe 表 【數(shù)據(jù)結(jié)構(gòu)】

series 列【數(shù)據(jù)結(jié)構(gòu)】

object --> python str 字符串 【數(shù)據(jù)類型】int64 --> python int 整數(shù) 【數(shù)據(jù)類型】float64 --> python float 小數(shù) 【數(shù)據(jù)類型】bool --> python bool True False 【數(shù)據(jù)類型】datetime64 --> python datetime 時間日期 【數(shù)據(jù)類型】timedelta[ns]–> 兩個時間點(diǎn)之間相距的時間差,單位是納秒 【數(shù)據(jù)類型】category --> 特定分類數(shù)據(jù)類型,比如性別分為男、女、其他 【數(shù)據(jù)類型】 字符串object 、整數(shù)int、小數(shù)float 以及 布爾值bool類型都是比較常見的一般類型;本章節(jié)將詳細(xì)介紹不常見的 時間類型 以及 時間差類型 import pandas as pd

# 加載印度城市空氣質(zhì)量數(shù)據(jù)集

df = pd.read_csv('../data/city_day.csv')

# 查看數(shù)據(jù)集各列及各自的數(shù)據(jù)類型

df.info()

# 數(shù)據(jù)結(jié)果如下

DatetimeIndex: 29531 entries, 2015-01-01 to 2020-07-01

Data columns (total 15 columns):

# Column Non-Null Count Dtype

--- ------ -------------- -----

0 City 29531 non-null object

1 PM2.5 24933 non-null float64

2 PM10 18391 non-null float64

3 NO 25949 non-null float64

4 NO2 25946 non-null float64

5 NOx 25346 non-null float64

6 NH3 19203 non-null float64

7 CO 27472 non-null float64

8 SO2 25677 non-null float64

9 O3 25509 non-null float64

10 Benzene 23908 non-null float64

11 Toluene 21490 non-null float64

12 Xylene 11422 non-null float64

13 AQI 24850 non-null float64

14 AQI_Bucket 24850 non-null object

dtypes: float64(13), object(2)

memory usage: 3.6+ MB

2 類型轉(zhuǎn)換

通過 astype() 或 to_numeric() 實(shí)現(xiàn)類型轉(zhuǎn)換

2.1 seriers.astype函數(shù)轉(zhuǎn)換數(shù)據(jù)類型

astype函數(shù)是通用函數(shù),可用于把DataFrame中的任何列(Series)轉(zhuǎn)換為其他dtype;可以向astype方法提供任何內(nèi)置類型或numpy類型來轉(zhuǎn)換列(Series)的數(shù)據(jù)類型

astype函數(shù)使用 print(df['PM2.5'].astype(dtype=str))

print(df['PM2.5'].astype(dtype=object))

# 以上效果相同, 輸出結(jié)果如下

0 NaN

1 NaN

2 NaN

3 NaN

4 NaN

...

29526 15.02

29527 24.38

29528 22.91

29529 16.64

29530 15

Name: PM2.5, Length: 29531, dtype: object

astype注意點(diǎn)

astype函數(shù)要求DataFrame列的數(shù)據(jù)類型必須相同,當(dāng)有些數(shù)據(jù)中有缺失,但不是NaN時(如’missing’,'null’等),會使整列數(shù)據(jù)變成字符串類型而不是數(shù)值型,這個時候就會報(bào)錯

df2 = df.head().copy()

# 創(chuàng)造包含'missing'為缺失值的數(shù)據(jù),批量替換第1、3、5行中NO列的值為字符串'missing'

df2.loc[::2, 'NO'] = 'missing'

print(df2)

print(df2['NO'].dtypes)

# 輸出結(jié)果如下

City Date PM2.5 PM10 ... Toluene Xylene AQI AQI_Bucket

0 Ahmedabad 2015-01-01 NaN NaN ... 0.02 0.00 NaN NaN

1 Ahmedabad 2015-01-02 NaN NaN ... 5.50 3.77 NaN NaN

2 Ahmedabad 2015-01-03 NaN NaN ... 16.40 2.25 NaN NaN

3 Ahmedabad 2015-01-04 NaN NaN ... 10.14 1.00 NaN NaN

4 Ahmedabad 2015-01-05 NaN NaN ... 18.89 2.78 NaN NaN

[5 rows x 16 columns]

object

此時運(yùn)行下面的代碼會報(bào)錯ValueError: could not convert string to float: 'missing',無法使用astype函數(shù)進(jìn)行類型轉(zhuǎn)換;這個時候我們可以使用to_numeric函數(shù) print(df2['NO'].astype(float))

2.2 pd.to_numeric函數(shù)字符串轉(zhuǎn)數(shù)字類型

astype函數(shù)要求DataFrame列的數(shù)據(jù)類型必須相同,當(dāng)有些數(shù)據(jù)中有缺失,但不是NaN時(如’missing’,'null’等),會使整列數(shù)據(jù)變成字符串類型而不是數(shù)值型,這個時候可以使用to_numeric處理

pd.to_numeric函數(shù)的參數(shù)errors, 它決定了當(dāng)該函數(shù)遇到無法轉(zhuǎn)換的數(shù)值時該如何處理

默認(rèn)情況下,該值為raise,如果to_numeric遇到無法轉(zhuǎn)換的值時,會拋出異常coerce: 如果to_numeric遇到無法轉(zhuǎn)換的值時,會返回NaN值ignore: 如果to_numeric遇到無法轉(zhuǎn)換的值時會放棄轉(zhuǎn)換,什么都不做 # 轉(zhuǎn)換成float類型, 拋出異常:ValueError: Unable to parse string "missing" at position 0

# print(pd.to_numeric(df2['NO']))

# 無法轉(zhuǎn)換的值返回NaN

print(pd.to_numeric(df2['NO'], errors='coerce'))

# 無法轉(zhuǎn)換的值返回原值

print(pd.to_numeric(df2['NO'], errors='ignore'))

# 輸出結(jié)果

0 NaN

1 0.97

2 NaN

3 1.70

4 NaN

Name: NO, dtype: float64

0 missing

1 0.97

2 missing

3 1.7

4 missing

Name: NO, dtype: object

3 datetime時間類型

3.1 Python中的datetime類型

python沒有原生的datetime數(shù)據(jù)類型,需要使用datetime包 from datetime import datetime

now = datetime.now()

someday = datetime(2020, 1, 1)

print(now)

print(type(now))

print(someday)

print(type(someday))

# 返回輸出結(jié)果如下

2024-02-07 09:50:20.461322

2020-01-01 00:00:00

3.2 讀取數(shù)據(jù)時指定列為datetime類型

讀取數(shù)據(jù)集時,使用參數(shù)parse_dates=[列下標(biāo)/列名]直接將轉(zhuǎn)為datetime類型 # 加載印度城市空氣質(zhì)量數(shù)據(jù)集

# df = pd.read_csv('../data/city_day.csv', parse_dates=[1])

df = pd.read_csv('../data/city_day.csv', parse_dates=['Date'])

print(df['Date'].head())

# 數(shù)據(jù)結(jié)果如下

0 2015-01-01

1 2015-01-02

2 2015-01-03

3 2015-01-04

4 2015-01-05

Name: Date, dtype: datetime64[ns]

3.3 pd.to_datetime將字符串轉(zhuǎn)換為時間日期類型

df = pd.read_csv('../data/city_day.csv')

# 查看Date列數(shù)據(jù)類型

print(df['Date'].head())

# 將Date列數(shù)據(jù)轉(zhuǎn)換為時間類型

df['Date'] = pd.to_datetime(df['Date'])

print(df['Date'].head())

# 輸出結(jié)果如下

0 2015-01-01

1 2015-01-02

2 2015-01-03

3 2015-01-04

4 2015-01-05

Name: Date, dtype: object

0 2015-01-01

1 2015-01-02

2 2015-01-03

3 2015-01-04

4 2015-01-05

Name: Date, dtype: datetime64[ns]

3.4 提取datetime類型數(shù)據(jù)中具體時間

由datetime構(gòu)成的Seriers提取時間日期中的各個部分 # print(df['Date'].year) # 報(bào)錯

print(df['Date'].dt.year)

print(df['Date'].dt.month)

print(df['Date'].dt.day)

print(df['Date'].dt.hour)

print(df['Date'].dt.minute)

print(df['Date'].dt.second)

print(df['Date'].dt.quarter) # 季度

print(df['Date'].dt.dayofweek + 1) # 星期,與 df['Date'].dt.weekday+1 相同

print(df['Date'].dt.weekday + 1) # 星期

由datetime構(gòu)成的Seriers的其中一個數(shù)據(jù)提取時間日期中的各個部分 d = pd.to_datetime('2020-06-20')

print(d) # d ==> 2020-06-20 00:00:00

print(type(d)) #

print(d.year)

print(d.month)

print(d.day)

print(d.hour)

print(d.minute)

print(d.second)

print(d.quarter) # 季度

print(d.weekday()) # 星期幾,與d.dayofweek相同 0是星期一 1是星期二 6是星期日

print(d.dayofweek + 1)

3.5 datetime類型的Seriers進(jìn)行時間計(jì)算

datetime類型的日期可以直接進(jìn)行時間計(jì)算:

可以直接使用聚合函數(shù)也可以直接進(jìn)行時間差運(yùn)算 # 直接調(diào)用聚合函數(shù)

print(df['Date'].min())

# 直接進(jìn)行時間差運(yùn)算

# 返回時間差類型數(shù)據(jù)構(gòu)成的Seriers

print(df['Date'] - df['Date'].min())

# 輸出結(jié)果如下

2015-01-01 00:00:00

0 0 days

1 1 days

2 2 days

3 3 days

4 4 days

...

29526 2004 days

29527 2005 days

29528 2006 days

29529 2007 days

29530 2008 days

Name: Date, Length: 29531, dtype: timedelta64[ns]

3.6 datetime類型數(shù)據(jù)列作為df索引

datetime類型數(shù)據(jù)列作為df索引可以通過具體的時間查詢df子集 # 加載數(shù)據(jù)集,設(shè)定時間類型列為索引列

df = pd.read_csv('../data/city_day.csv', index_col='Date', parse_dates=True)

# 對索引進(jìn)行重新排序

df = df.sort_index() # 必要步驟

print(df['2018']) # 索引排序之后,才能按年取子集df

print(df['2016-06']) # 按年月取子集df:所有符合條件的完整行數(shù)據(jù)

print(df.loc['2015-3-4 22': '2016-1-1 23:45:00']) # 按時間范圍取子集

# 輸出結(jié)果如下

City PM2.5 PM10 ... Xylene AQI AQI_Bucket

Date ...

2018-01-01 Hyderabad 57.70 119.64 ... 3.74 122.0 Moderate

2018-01-01 Delhi 303.41 415.09 ... 0.24 462.0 Severe

2018-01-01 Ahmedabad 84.46 NaN ... 6.33 278.0 Poor

2018-01-01 Visakhapatnam 59.73 99.04 ... 0.66 131.0 Moderate

2018-01-01 Talcher NaN NaN ... NaN NaN NaN

... ... ... ... ... ... ... ...

2018-12-31 Brajrajnagar 113.28 187.85 ... NaN 236.0 Poor

2018-12-31 Ahmedabad 80.54 NaN ... 6.93 744.0 Severe

2018-12-31 Lucknow 248.51 NaN ... NaN 403.0 Severe

2018-12-31 Talcher 84.30 263.09 ... NaN 200.0 Moderate

2018-12-31 Amritsar 78.42 186.41 ... 9.09 184.0 Moderate

[6471 rows x 15 columns]

City PM2.5 PM10 ... Xylene AQI AQI_Bucket

Date ...

2016-06-01 Patna 68.89 NaN ... 0.45 147.0 Moderate

2016-06-01 Lucknow 138.37 NaN ... NaN 207.0 Poor

2016-06-01 Ahmedabad NaN NaN ... NaN NaN NaN

2016-06-01 Delhi 76.56 251.87 ... NaN 283.0 Poor

2016-06-01 Hyderabad 39.88 NaN ... 0.23 111.0 Moderate

... ... ... ... ... ... ... ...

2016-06-30 Mumbai NaN NaN ... NaN NaN NaN

2016-06-30 Lucknow 89.00 NaN ... NaN 59.0 Satisfactory

2016-06-30 Patna 45.54 NaN ... 0.17 85.0 Satisfactory

2016-06-30 Delhi 69.65 103.25 ... NaN 190.0 Moderate

2016-06-30 Ahmedabad 30.16 NaN ... 0.00 256.0 Poor

[270 rows x 15 columns]

City PM2.5 PM10 ... Xylene AQI AQI_Bucket

Date ...

2015-03-05 Delhi 106.57 196.19 ... 10.65 275.0 Poor

2015-03-05 Hyderabad NaN NaN ... 1.01 NaN NaN

2015-03-05 Lucknow NaN NaN ... NaN NaN NaN

2015-03-05 Ahmedabad 173.01 NaN ... 4.13 780.0 Severe

2015-03-05 Chennai NaN NaN ... NaN NaN NaN

... ... ... ... ... ... ... ...

2016-01-01 Bengaluru 56.40 95.08 ... NaN 101.0 Moderate

2016-01-01 Delhi 295.71 476.09 ... 0.00 463.0 Severe

2016-01-01 Hyderabad 232.83 108.20 ... 2.41 387.0 Very Poor

2016-01-01 Patna 553.63 NaN ... 2.34 619.0 Severe

2016-01-01 Lucknow 203.43 NaN ... NaN 375.0 Very Poor

[2372 rows x 15 columns]

4 timedelta時間差類型

4.1 Python中的timedelta類型

python沒有原生的timedelta數(shù)據(jù)類型,需要使用datetime包 from datetime import datetime

t1 = datetime.now()

t2 = datetime(2020, 1, 1)

diff = t1 - t2

# 時間差類型

print(diff)

print(type(diff))

# 輸出結(jié)果如下

1498 days, 10:07:14.970549

4.2 Pandas中的timedelta類型

兩個時間Seriers相減即可得到timedelta類型數(shù)據(jù)構(gòu)成的Seriers對象 # 加載數(shù)據(jù),指定下標(biāo)為1的列為時間日期類型

df = pd.read_csv('../data/city_day.csv', parse_dates=[1])

# 當(dāng)前日期減去數(shù)據(jù)集中最早的日期,即可得到時間差;同時賦值給新的列

df['ref_date'] = df['Date'] - df['Date'].min()

print(df['ref_date'].head())

# 輸出結(jié)果如下

0 0 days

1 1 days

2 2 days

3 3 days

4 4 days

Name: ref_date, dtype: timedelta64[ns]

4.3 pd.to_timedelta函數(shù)轉(zhuǎn)換timedelta類型

timedelta類型轉(zhuǎn)換為字符串類型 s1 = df['ref_date'].astype(str)

print(s1)

# 返回結(jié)果如下

0 0 days

1 1 days

2 2 days

3 3 days

4 4 days

...

29526 2004 days

29527 2005 days

29528 2006 days

29529 2007 days

29530 2008 days

Name: ref_date, Length: 29531, dtype: object

字符串類型轉(zhuǎn)換為timedelta類型 s2 = pd.to_timedelta(s1)

print(s2)

# 返回結(jié)果如下

0 0 days

1 1 days

2 2 days

3 3 days

4 4 days

...

29526 2004 days

29527 2005 days

29528 2006 days

29529 2007 days

29530 2008 days

Name: ref_date, Length: 29531, dtype: timedelta64[ns]

4.4 timedelta類型數(shù)據(jù)作為df索引

如果將timedelta類型數(shù)據(jù)作為df索引,就可以基于時間差范圍來選擇數(shù)據(jù) # 讀取數(shù)據(jù),并將下標(biāo)為1的Date列設(shè)為時間類型列

df = pd.read_csv('../data/city_day.csv', parse_dates=[1])

# 獲取印度城市德里的子集

df2 = df.query('City=="Delhi"')

# 將timedelta類型的Series設(shè)置為df的索引

# df2.索引 = Date列 - Date列最早的那一天

df2.index = df2['Date'] - df2['Date'].min()

print(df2.head()) # 查看數(shù)據(jù)集

# 基于時間差范圍來選擇數(shù)據(jù)

print(df2['0 days':'4 days'])

# 輸出結(jié)果如下

City Date PM2.5 PM10 ... Toluene Xylene AQI AQI_Bucket

Date ...

0 days Delhi 2015-01-01 313.22 607.98 ... 24.86 9.84 472.0 Severe

1 days Delhi 2015-01-02 186.18 269.55 ... 20.09 4.29 454.0 Severe

2 days Delhi 2015-01-03 87.18 131.90 ... 10.23 1.99 143.0 Moderate

3 days Delhi 2015-01-04 151.84 241.84 ... 9.71 3.34 319.0 Very Poor

4 days Delhi 2015-01-05 146.60 219.13 ... 6.21 2.96 325.0 Very Poor

[5 rows x 16 columns]

City Date PM2.5 PM10 ... Toluene Xylene AQI AQI_Bucket

Date ...

0 days Delhi 2015-01-01 313.22 607.98 ... 24.86 9.84 472.0 Severe

1 days Delhi 2015-01-02 186.18 269.55 ... 20.09 4.29 454.0 Severe

2 days Delhi 2015-01-03 87.18 131.90 ... 10.23 1.99 143.0 Moderate

3 days Delhi 2015-01-04 151.84 241.84 ... 9.71 3.34 319.0 Very Poor

4 days Delhi 2015-01-05 146.60 219.13 ... 6.21 2.96 325.0 Very Poor

[5 rows x 16 columns]

總結(jié)

請對下面的內(nèi)容 有印象、能找到、能理解、能看懂

1. Pandas中的數(shù)據(jù)類型

Pandas數(shù)據(jù)類型Python類型說明objectstr字符串int64int整數(shù)float64float浮點(diǎn)數(shù)boolbool布爾值category無原生類型分類類型datetime無原生類型時間日期類型timedelta無原生類型時間差類型

2. Pandas中數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)類型的關(guān)系

pandas是基于numpy構(gòu)建的包,所以pandas中的數(shù)據(jù)類型都是基于Numpy中的ndarray類型實(shí)現(xiàn)的Pandas中的數(shù)據(jù)結(jié)構(gòu)對象和數(shù)據(jù)類型對象:

dataframe 表 【數(shù)據(jù)結(jié)構(gòu)】

series 列【數(shù)據(jù)結(jié)構(gòu)】

object --> python str 字符串 【數(shù)據(jù)類型】int64 --> python int 整數(shù) 【數(shù)據(jù)類型】float64 --> python float 小數(shù) 【數(shù)據(jù)類型】bool --> python bool True False 【數(shù)據(jù)類型】datetime64 --> python datetime 時間日期 【數(shù)據(jù)類型】 timedelta[ns]–> 兩個時間點(diǎn)之間相距的時間差,單位是納秒 【數(shù)據(jù)類型】

3. Pandas數(shù)據(jù)類型轉(zhuǎn)換基本方法

df['列名'].astype(str)當(dāng)Seriers對象使用astype函數(shù)轉(zhuǎn)換的結(jié)果中數(shù)據(jù)類型不同時,使用to_numeric函數(shù)

pd.to_numeric(df['列名'], errors='coerce')無法轉(zhuǎn)換的值返回NaNpd.to_numeric(df['列名'], errors='ignore') 無法轉(zhuǎn)換的值返回原值

4. datetime時間類型

datetime時間類型的Seriers來源兩種方式:

讀取時指定 df = pd.read_csv('..xxx.csv', parse_dates=[1])轉(zhuǎn)換 df['Date'] = pd.to_datetime(df['Date']) 提取datetime時間類型的Seriers中的具體年月日時分秒星期

df['Date'].dt.yeardf['Date'].dt.quarter # 季度df['Date'].dt.dayofweek + 1 # 星期 提取datetime時間類型的Seriers中的某一個值的具體年月日時分秒星期

df4['Date'][0].dayofweek+1 # 星期 datetime時間類型的Seriers可以進(jìn)行時間計(jì)算

直接調(diào)用聚合函數(shù) df['Date'].max() # 最近的日期計(jì)算時間差 df['Date'] - df['Date'].min() # 返回時間差類型數(shù)據(jù)構(gòu)成的Seriers datetime時間類型的S對象作為索引的兩種方式

df = pd.read_csv('..xxx.csv', index_col='Date', parse_dates=True)df.index = df['date']注意:要對索引進(jìn)行重新排序 必要步驟 df = df.sort_index() datetime時間類型索引可以按照時間范圍取子集

df['2018']df['2016-06']df.loc['2015-3-4 22': '2016-1-1 23:45:00']

5. timedelta時間差類型

timedelta時間差類型的創(chuàng)建:

df['date_diff'] = df['Date'] - df['Date'].min() 字符串類型轉(zhuǎn)換為時間差類型

s2 = pd.to_timedelta(s1) timedelta時間差類型設(shè)為索引

df.index = df['Date'] - df['Date'].min() 基于時間差范圍來選擇數(shù)據(jù)

df['0 days':'4 days']

柚子快報(bào)邀請碼778899分享:Pandas數(shù)據(jù)類型

http://yzkb.51969.com/

好文推薦

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/19517576.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄