tynbl.github.io

Pandas简单数据分析

1. 创建Series

import pandas as pd

countries = ['中国', '美国', '澳大利亚']
countries_s = pd.Series(countries)
print(type(countries_s))
print(countries_s)
<class 'pandas.core.series.Series'>
0      中国
1      美国
2    澳大利亚
dtype: object
numbers = [4, 5, 6]
print(pd.Series(numbers))
0    4
1    5
2    6
dtype: int64
country_dicts = {'CH': '中国',
                'US': '美国',
                'AU': '澳大利亚'}

country_dict_s = pd.Series(country_dicts)
print(country_dict_s)
print(country_dict_s.index)
AU    澳大利亚
CH      中国
US      美国
dtype: object
Index(['AU', 'CH', 'US'], dtype='object')

2. 处理缺失数据

countries = ['中国', '美国', '澳大利亚', None]
print(pd.Series(countries))
0      中国
1      美国
2    澳大利亚
3    None
dtype: object
numbers = [4, 5, 6, None]
print(pd.Series(numbers))
0    4.0
1    5.0
2    6.0
3    NaN
dtype: float64

3. Series 索引

country_dicts = {'CH': '中国',
                'US': '美国',
                'AU': '澳大利亚'}

country_dict_s = pd.Series(country_dicts)
print(country_dict_s)
AU    澳大利亚
CH      中国
US      美国
dtype: object
print('iloc:', country_dict_s.iloc[1])
print('loc:', country_dict_s.loc['US'])
print('[]:', country_dict_s['US'])
iloc: 中国
loc: 美国
[]: 美国
print('iloc:\n', country_dict_s.iloc[[0, 2]])
print()
print('loc:\n', country_dict_s.loc[['US', 'AU']])
iloc:
 AU    澳大利亚
US      美国
dtype: object

loc:
 US      美国
AU    澳大利亚
dtype: object

4. 向量化操作

import numpy as np

s = pd.Series(np.random.randint(0, 1000, 10000))
print(s.head())
print(len(s))
0    658
1    937
2    260
3      8
4    693
dtype: int32
10000
%%timeit -n 100
total = 0
for item in s:
    total += item
1.35 ms ± 20.8 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%%timeit -n 100
total = np.sum(s)
166 µs ± 45.6 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)
%%timeit -n 10
s = pd.Series(np.random.randint(0, 1000, 10000))
for label, value in s.iteritems():
    s.loc[label] = value + 2
929 ms ± 44.2 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
%%timeit -n 10
s = pd.Series(np.random.randint(0, 1000, 10000))
s += 2
549 µs ± 173 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)