读取csv文件
import pandas as pd
new = pd.read_csv('city.csv')//csv文件名称
print(new)
利用web api进行获取数据
import requests
import json
import pandas as pd
import numpy as np
url = 'https://api.seniverse.com/v3/weather/now.json?key=kutzoofe5f2h1w
yc&location=zibo&language=zh-Hans&unit=c'
r = requests.get(url)
print(r.text)#返回为json格式,需对其进行处理
数据准备
(预处理)过程中常常需要进行数据的处理,例如数据清洗包括缺失值和异常值处理,数据变换如规范化数据,数据规约如属性规约(选择部分有代表性的属性)等,在Python有很多进行数据预处理的快速方法,以数据清洗中的缺失值处理为例,在实际过程中常常会发现有的数据是缺失(NaN)的,这些值是需要特别处理的。缺失值的判断可利用numpy中的isnan()函数,而对于Series或DataFrame,缺失值的判断和处理非常的方便,例如df.dropna()可以删掉含NaN(NA)的行,df.dropna(how='all')只丢弃全为NaN的那些行,也可以进行值的插补,例如用0、均值、中位数或众数等进行填充插补,也可用插值法即基于已知点建立插值函数f(x),通过xi求得f(xi)来近似替代,常用方法有拉格朗日插值法和牛顿插值法NaN。以常用的简单填充为例,可用df.fillna(某一个值)方式用某一个值如0或平均值等代替NaN(例如df.fillna(0)表示用0代替NaN),也可用其method参数指定缺失值的填充方向,例如:
>>> fruit_df = pd.Series(['apple', 'orange', 'pear'], index=[0, 2, 5])
>>> fruit_df = fruit_df.reindex(range(7))
>>> fruit_df
0 apple
1 NaN
2 orange
3 NaN
4 NaN
5 pear
6 NaN
dtype: object
# inplace参数设为True表示直接修改原对象fruit_df,否则将填充后的结果返回,原对象不变
>>> fruit_df.fillna(method='ffill', inplace = True)
>>> print(fruit_df)
0 apple
1 apple
2 orange
3 orange
4 orange
5 pear
6 pear
dtype: object
ffill表示用前一个非缺失值代替NaN填充,而bfill表示用下一个非缺失数据代替NaN填充,要根据数据的特点选择不同的填充方式,如果选择错误结果可能会不能正确填充,请选择如下填充方式的结果。
>>> import pandas as pd
>>> fruit_df = pd.Series(['apple', 'orange', 'pear'], index=[0, 2, 5])
>>> fruit_df = fruit_df.reindex(range(7))
>>> fruit_df.fillna(method='bfill', inplace = True)
>>> print(fruit_df)
0 apple
1 orange
2 orange
3 pear
4 pear
5 pear
6 NaN
dtype: object
时间戳timestamp
>>> from datetime import date
>>> firstday = date.fromtimestamp(1464010200)
>>> lastday = date.fromtimestamp(1495200600)#转换为正常日期
>>> firstday
datetime.date(2016, 5, 23)
>>> lastday
datetime.date(2017, 5, 19)
>>> x = date.strftime(firstday,'%Y-%m-%d')#转为固定格式
>>> x
'2016-05-23'
>>> import time
>>> temp=time.strptime('2015-05-31',"%Y-%m-%d")#格式化为time对象
>>> temp
time.struct_time(tm_year=2015, tm_mon=5, tm_mday=31, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=6, tm_yday=151, tm_isdst=-1)
>>> type(temp)
<class 'time.struct_time'>
创建时间序列
>>> import pandas as pd
>>> data = pd.date_range('20190228',periods=2)#periods代表生成长度为多少的序列
>>> data
DatetimeIndex(['2019-02-28', '2019-03-01'], dtype='datetime64[ns]', freq='D')
DataFrame的数据显示
>>> import pandas as pd
>>> data = pd.read_csv('city.csv')
>>> data
Code 国家和地区名 国家和地区名(英文) 国家和地区名(繁体) 大洲
0 AD 安道尔 Andorra 安道爾 欧洲
1 AE 阿联酋 United Arab Emirates 阿聯 亚洲
2 AF 阿富汗 Afghanistan 阿富汗 亚洲
3 AG 安提瓜和巴布达 Antigua and Barbuda 安地卡及巴布達 北美洲
4 AI 安圭拉 Anguilla 英屬安圭拉 北美洲
5 AL 阿尔巴尼亚 Albania 阿爾巴尼亞 欧洲
6 AM 亚美尼亚 Armenia 亞美尼亞 亚洲
7 AO 安哥拉 Angola 安哥拉 非洲
8 AQ 南极洲 Antarctica 南極洲 南极洲
9 AR 阿根廷 Argentina 阿根廷 南美洲
10 AS 美属萨摩亚 American Samoa 美屬薩摩亞 大洋洲
11 AT 奥地利 Austria 奧地利 欧洲
12 AU 澳大利亚 Australia 澳洲 大洋洲
13 AW 阿鲁巴 Aruba 阿魯巴 北美洲
14 AX 奥兰群岛 Åaland Islands 奧蘭群島 欧洲
15 AZ 阿塞拜疆 Azerbaijan 亞塞拜然 亚洲
16 BA 波黑 Bosnia and Herzegovina 波赫 欧洲
17 BB 巴巴多斯 Barbados 巴貝多 北美洲
18 BD 孟加拉国 Bangladesh 孟加拉 亚洲
19 BE 比利时 Belgium 比利時 欧洲
20 BF 布基纳法索 Burkina Faso 布吉納法索 非洲
21 BG 保加利亚 Bulgaria 保加利亞 欧洲
22 BH 巴林 Bahrain 巴林 亚洲
23 BI 布隆迪 Burundi 蒲隆地 非洲
24 BJ 贝宁 Benin 貝南 非洲
25 BL 圣巴泰勒米岛 Saint Barthélemy 聖巴瑟米 北美洲
26 BM 百慕大 Bermuda 百慕達 北美洲
27 BN 文莱 Brunei Darussalam 汶萊 亚洲
28 BO 玻利维亚 Bolivia, Plurinational 玻利維亞 南美洲
29 BQ 荷兰加勒比区 Bonaire, Sint Eustatius and Saba 荷蘭加勒比區 北美洲
.. ... ... ... ... ...
221 TL 东帝汶 Timor-Leste 東帝汶 大洋洲
222 TM 土库曼斯坦 Turkmenistan 土庫曼 亚洲
223 TN 突尼斯 Tunisia 突尼西亞 非洲
224 TO 汤加 Tonga 東加 大洋洲
225 TR 土耳其 Turkey 土耳其 亚洲
226 TT 特立尼达和多巴哥 Trinidad and Tobago 特立尼達和多巴哥 北美洲
227 TV 图瓦卢 Tuvalu 吐瓦魯 大洋洲
228 TW 中国台湾 Taiwan, Province of China 中國台灣 亚洲
229 TZ 坦桑尼亚 Tanzania, United Republic of 坦尚尼亞 非洲
230 UA 乌克兰 Ukraine 烏克蘭 欧洲
231 UG 乌干达 Uganda 烏干達 非洲
232 UM 美国本土���小岛屿 United States Minor Outlying Islands 美國邊疆小島 大洋洲
233 US 美国 United States 美國 北美洲
234 UY 乌拉圭 Uruguay 烏拉圭 南美洲
235 UZ 乌兹别克斯坦 Uzbekistan 烏茲別克 亚洲
236 VA 梵蒂冈 Holy See (Vatican City State) 梵蒂岡 欧洲
237 VC 圣文森特和格林纳丁斯 Saint Vincent and the Grenadines 聖文森及格瑞那丁 北美洲
238 VE 委内瑞拉 Venezuela, Bolivarian Republic of 委內瑞拉 南美洲
239 VG 英属维尔京群岛 Virgin Islands, U.S. 英屬維爾京群島 北美洲
240 VI 美属维尔京群岛 United States Virgin Islands 美屬維爾京群島 北美洲
241 VN 越南 Vietnam 越南 亚洲
242 VU 瓦努阿图 Vanuatu 萬那杜 大洋洲
243 WF 瓦利斯和富图纳 Wallis and Futuna 沃里斯與伏塔那島 大洋洲
244 WS 萨摩亚 Samoa 薩摩亞 大洋洲
245 XK 科索沃 Kosovo 科索沃 欧洲
246 YE 也门 Yemen 葉門 亚洲
247 YT 马约特 Mayotte 美亞特 非洲
248 ZA 南非 South Africa 南非 非洲
249 ZM 赞比亚 Zambia 尚比亞 非洲
250 ZW 津巴布韦 Zimbabwe 辛巴威 非洲
[251 rows x 5 columns]
>>> data.index
RangeIndex(start=0, stop=251, step=1)
>>> list(data.index)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250]
>>> list(data.columns)
['Code', '国家和地区名', '国家和地区名(英文)', '国家和地区名(繁体)', '大洲']
>>> data.values
array([['AD', '安道尔', 'Andorra', '安道爾', '欧洲'],
['AE', '阿联酋', 'United Arab Emirates', '阿聯', '亚洲'],
['AF', '阿富汗', 'Afghanistan', '阿富汗', '亚洲'],
...,
['ZA', '南非', 'South Africa', '南非', '非洲'],
['ZM', '赞比亚', 'Zambia', '尚比亞', '非洲'],
['ZW', '津巴布韦', 'Zimbabwe', '辛巴威', '非洲']], dtype=object)
>>> data.describe
<bound method NDFrame.describe of Code 国家和地区名 国家和地区名(英文) 国家和地区名(繁体) 大洲
0 AD 安道尔 Andorra 安道爾 欧洲
1 AE 阿联酋 United Arab Emirates 阿聯 亚洲
2 AF 阿富汗 Afghanistan 阿富汗 亚洲
3 AG 安提瓜和巴布达 Antigua and Barbuda 安地卡及巴布達 北美洲
4 AI 安圭拉 Anguilla 英屬安圭拉 北美洲
5 AL 阿尔巴尼亚 Albania 阿爾巴尼亞 欧洲
6 AM 亚美尼亚 Armenia 亞美尼亞 亚洲
7 AO 安哥拉 Angola 安哥拉 非洲
8 AQ 南极洲 Antarctica 南極洲 南极洲
9 AR 阿根廷 Argentina 阿根廷 南美洲
10 AS 美属萨摩亚 American Samoa 美屬薩摩亞 大洋洲
11 AT 奥地利 Austria 奧地利 欧洲
12 AU 澳大利亚 Australia 澳洲 大洋洲
13 AW 阿鲁巴 Aruba 阿魯巴 北美洲
14 AX 奥兰群岛 Åaland Islands 奧蘭群島 欧洲
15 AZ 阿塞拜疆 Azerbaijan 亞塞拜然 亚洲
16 BA 波黑 Bosnia and Herzegovina 波赫 欧洲
17 BB 巴巴多斯 Barbados 巴貝多 北美洲
18 BD 孟加拉国 Bangladesh 孟加拉 亚洲
19 BE 比利时 Belgium 比利時 欧洲
20 BF 布基纳法索 Burkina Faso 布吉納法索 非洲
21 BG 保加利亚 Bulgaria 保加利亞 欧洲
22 BH 巴林 Bahrain 巴林 亚洲
23 BI 布隆迪 Burundi 蒲隆地 非洲
24 BJ 贝宁 Benin 貝南 非洲
25 BL 圣巴泰勒米岛 Saint Barthélemy 聖巴瑟米 北美洲
26 BM 百慕大 Bermuda 百慕達 北美洲
27 BN 文莱 Brunei Darussalam 汶萊 亚洲
28 BO 玻利维亚 Bolivia, Plurinational 玻利維亞 南美洲
29 BQ 荷兰加勒比区 Bonaire, Sint Eustatius and Saba 荷蘭加勒比區 北美洲
.. ... ... ... ... ...
221 TL 东帝汶 Timor-Leste 東帝汶 大洋洲
222 TM 土库曼斯坦 Turkmenistan 土庫曼 亚洲
223 TN 突尼斯 Tunisia 突尼西亞 非洲
224 TO 汤加 Tonga 東加 大洋洲
225 TR 土耳其 Turkey 土耳其 亚洲
226 TT 特立尼达和多巴哥 Trinidad and Tobago 特立尼達和多巴哥 北美洲
227 TV 图瓦卢 Tuvalu 吐瓦魯 大洋洲
228 TW 中国台湾 Taiwan, Province of China 中國台灣 亚洲
229 TZ 坦桑尼亚 Tanzania, United Republic of 坦尚尼亞 非洲
230 UA 乌克兰 Ukraine 烏克蘭 欧洲
231 UG 乌干达 Uganda 烏干達 非洲
232 UM 美国本土外小岛屿 United States Minor Outlying Islands 美國邊疆小島 大洋洲
233 US 美国 United States 美國 北美洲
234 UY 乌拉圭 Uruguay 烏拉圭 南美洲
235 UZ 乌兹别克斯坦 Uzbekistan 烏茲別克 亚洲
236 VA 梵蒂冈 Holy See (Vatican City State) 梵蒂岡 欧洲
237 VC 圣文森特和格林纳丁斯 Saint Vincent and the Grenadines 聖文森及格瑞那丁 北美洲
238 VE 委内瑞拉 Venezuela, Bolivarian Republic of 委內瑞拉 南美洲
239 VG 英属维尔京群岛 Virgin Islands, U.S. 英屬維爾京群島 北美洲
240 VI 美属维尔京群岛 United States Virgin Islands 美屬維爾京群島 北美洲
241 VN 越南 Vietnam 越南 亚洲
242 VU 瓦努阿图 Vanuatu 萬那杜 大洋洲
243 WF 瓦利斯和富图纳 Wallis and Futuna 沃里斯與伏塔那島 大洋洲
244 WS 萨摩亚 Samoa 薩摩亞 大洋洲
245 XK 科索沃 Kosovo 科索沃 欧洲
246 YE 也门 Yemen 葉門 亚洲
247 YT 马约特 Mayotte 美亞特 非洲
248 ZA 南非 South Africa 南非 非洲
249 ZM 赞比亚 Zambia 尚比亞 非洲
250 ZW 津巴布韦 Zimbabwe 辛巴威 非洲
[251 rows x 5 columns]>
>>> data.head(5)#前五列
Code 国家和地区名 国家和地区名(英文) 国家和地区名(繁体) 大洲
0 AD 安道尔 Andorra 安道爾 欧洲
1 AE 阿联酋 United Arab Emirates 阿聯 亚洲
2 AF 阿富汗 Afghanistan 阿富汗 亚洲
3 AG 安提瓜和巴布达 Antigua and Barbuda 安地卡及巴布達 北美洲
4 AI 安圭拉 Anguilla 英屬安圭拉 北美洲
>>> data.tail(5)#后五列
Code 国家和地区名 国家和地区名(英文) 国家和地区名(繁体) 大洲
246 YE 也门 Yemen 葉門 亚洲
247 YT 马约特 Mayotte 美亞特 非洲
248 ZA 南非 South Africa 南非 非洲
249 ZM 赞比亚 Zambia 尚比亞 非洲
250 ZW 津巴布韦 Zimbabwe 辛巴威 非洲
>>> data.Code#某一列
0 AD
1 AE
2 AF
3 AG
4 AI
5 AL
6 AM
7 AO
8 AQ
9 AR
10 AS
11 AT
12 AU
13 AW
14 AX
15 AZ
16 BA
17 BB
18 BD
19 BE
20 BF
21 BG
22 BH
23 BI
24 BJ
25 BL
26 BM
27 BN
28 BO
29 BQ
..
221 TL
222 TM
223 TN
224 TO
225 TR
226 TT
227 TV
228 TW
229 TZ
230 UA
231 UG
232 UM
233 US
234 UY
235 UZ
236 VA
237 VC
238 VE
239 VG
240 VI
241 VN
242 VU
243 WF
244 WS
245 XK
246 YE
247 YT
248 ZA
249 ZM
250 ZW
Name: Code, Length: 251, dtype: object
>>> data.size
1255
>>> data.shape
(251, 5)
>>> data[2:4]
Code 国家和地区名 国家和地区名(英文) 国家和地区名(繁体) 大洲
2 AF 阿富汗 Afghanistan 阿富汗 亚洲
3 AG 安提瓜和巴布达 Antigua and Barbuda 安地卡及巴布達 北美洲
>>> data[2:4]#类似以索引切片
Code 国家和地区名 国家和地区名(英文) 国家和地区名(繁体) 大洲
2 AF 阿富汗 Afghanistan 阿富汗 亚洲
3 AG 安提瓜和巴布达 Antigua and Barbuda 安地卡及巴布達 北美洲
>>> data.loc[0:5,]#0到5行所有列
Code 国家和地区名 国家和地区名(英文) 国家和地区名(繁体) 大洲
0 AD 安道尔 Andorra 安道爾 欧洲
1 AE 阿联酋 United Arab Emirates 阿聯 亚洲
2 AF 阿富汗 Afghanistan 阿富汗 亚洲
3 AG 安提瓜和巴布达 Antigua and Barbuda 安地卡及巴布達 北美洲
4 AI 安圭拉 Anguilla 英屬安圭拉 北美洲
5 AL 阿尔巴尼亚 Albania 阿爾巴尼亞 欧洲
>>> data.loc[0:5,['Code','大洲']]0到5行,code列和大洲列
Code 大洲
0 AD 欧洲
1 AE 亚洲
2 AF 亚洲
3 AG 北美洲
4 AI 北美洲
5 AL 欧洲
>>> data.at[1,'大洲']#选择一个值
'亚洲'
>>> data.iloc[1:6,[0,2]]#注意iloc和loc的区别
Code 国家和地区名(英文)
1 AE United Arab Emirates
2 AF Afghanistan
3 AG Antigua and Barbuda
4 AI Anguilla
5 AL Albania
>>> data.iloc[1:6,[0,2]]
Code 国家和地区名(英文)
1 AE United Arab Emirates
2 AF Afghanistan
3 AG Antigua and Barbuda
4 AI Anguilla
5 AL Albania
>>> data.iloc[1:6,[0,1]]
Code 国家和地区名
1 AE 阿联酋
2 AF 阿富汗
3 AG 安提瓜和巴布达
4 AI 安圭拉
5 AL 阿尔巴尼亚
>>> data.iloc[1:6,0:2]
Code 国家和地区名
1 AE 阿联酋
2 AF 阿富汗
3 AG 安提瓜和巴布达
4 AI 安圭拉
5 AL 阿尔巴尼亚
>>> data.iat[1,2]
'United Arab Emirates'
>>> data.ix[(data.index<5)&(data.大洲=='亚洲')]#条件判断
Code 国家和地区名 国家和地区名(英文) 国家和地区名(繁体) 大洲
1 AE 阿联酋 United Arab Emirates 阿聯 亚洲
2 AF 阿富汗 Afghanistan 阿富汗 亚洲
>>> data[data.大洲=='亚洲'].Code#条件查找
1 AE
2 AF
6 AM
15 AZ
18 BD
22 BH
27 BN
32 BT
38 CC
47 CN
53 CX
78 GE
94 HK
100 ID
102 IL
104 IN
105 IO
106 IQ
107 IR
112 JO
113 JP
115 KG
116 KH
120 KP
121 KR
122 KW
124 KZ
125 LA
126 LB
129 LK
145 MM
146 MN
147 MO
154 MV
157 MY
165 NK
168 NP
172 OM
177 PH
178 PK
183 PS
187 QA
193 SA
198 SG
212 SY
218 TH
219 TJ
222 TM
225 TR
228 TW
235 UZ
241 VN
246 YE
Name: Code, dtype: object
>>>DataFrame.某一列.mean()#求平均值
>>> data['大洲'].value_counts()#计算大洲个数
非洲 58
亚洲 53
欧洲 53
北美洲 41
大洋洲 27
南美洲 14
南极洲 5
Name: 大洲, dtype: int64
>>> import numpy as np
np.>>> np.sign(5)#大于0返回1,小于0返回-1,等于0返回0
1
>>> np.sign(-0.25)
-1.0
>>> np.sign(0)
0
>>> np.array([1,2,3,4,5,6])
array([1, 2, 3, 4, 5, 6])
>>> x = np.array([1,2,3,4,5,6])
>>> np.diff(x)#返回后一元素与前一元素的差值
array([1, 1, 1, 1, 1])
>>> np.where(x>3)#两种调用方式
(array([3, 4, 5]),)
>>> np.where(x>3,1,0)
array([0, 0, 0, 1, 1, 1])
>>> DataFrame.sort_values(by='某一列',ascending=False)#针对某一列进行排序,False逆序True正序
有一个记录了爱吃苏式或广式月饼的用户DataFrame:
>>> mooncakes_df
name gender age taste of mooncake
0 Liuzi M 21 Cantonese-style
1 Huangqi F 32 Su-style
2 Yuanyuan F 35 Su-style
3 Duyue F 14 Cantonese-style
4 Zhangtian M 33 Cantonese-style
若要统计mooncakes_df中分别爱吃两种口味月饼的人数,可利用如下代码实现:
>>> mooncakes_df.groupby("taste of mooncake").age.count()
taste of mooncake
Cantonese-style 3
Su-style 2
Name: age, dtype: int64
可见使用groupby()方法结合一些统计函数在做数据的分组统计时非常有用,另外,值得注意的是,groupby()还常常与apply()函数连用,apply()函数可将数据分拆、应用和汇总,使用自定义函数更灵活地进行各类数据统计。apply()函数的自由度很高,它的最基本形式为“DataFrame.apply(func, axis = 0)”,func是函数,可以自己实现,默认axis为0,表示apply()函数会自动遍历DataFrame的每一列数据(一个Series)按相应函数功能对其进行处理,处理结束后将所有结果组合后返回,若axis设为1则遍历处理DataFrame的每一行数据。例如前面的功能可通过如下代码实现:
def f(df):
return df.age.count()
mooncakes_df.groupby('taste of mooncake').apply(f)