Python - Pandas 基础

Pandas 基础

https://pandas.pydata.org/docs/reference/index.html

1. 加载一个数据集

课程代码: github chendaniely/pandas_for_everyone

import pandas as pd

df = pd.read_csv('../data/xxxx.tsv', sep='\t')

# 头5行数据, 可以设置参数决定多少行
print(df.head())
df.head(n=1)

# 最后5行数据
print(df.tial())
df.tail(n=1)

# df 的类型
print(type(df))

# df 的形状, 行数, 列数
print(df.shape)

# 所有的列名
print(df.columns)

# 每列数据的类型
print(df.dtypes)

# df 的详细信息
print(df.info())

# 显示某一列的数据
df['country']
df.country

df[['country', 'continent', 'year']]

# 第一列
df[[0]]

# 最后一列
df[[-1]]

# 前5列的数据
df[list(range(5))]

# 列号是 3-5 列的数据
df[list(range(3, 6))]
# 列号是 0, 2, 4 列的数据
df[list(range(0, 5, 2))]

# 第一行的数据
df.loc[0]

# 最后一行
df.loc[df.shape[0] - 1]

# 使用行号来提取行
df.iloc[0]

# 行子集
df.ix[0]
# 第 1 行, 99 行, 999行数据
df.loc[[0, 99, 999]]
df.iloc[[0, 99, 999]]
df.ix[[0, 99, 999]]

# 提取行列子集
# 第43与 country 的数据
df.ix[42, 'country']
df.loc[42, 'country']
# 第43与 第一列的数据
df.iloc[42, 0]
# 提取多行, 多列
# 第1行, 100行, 1000行, 第 1, 4, 6 列的数据
df.ix[[0, 99, 999], [0, 3, 5]]
# 使用列名更直观
df.ix[[0, 99, 999], ['country', 'lifeExp', 'gdpPercap']]

数据分析

# 按 yearn 分组, 统计 lifeExp 的平均值
df.groupby('year')['lifeExp'].mean()
# 按 yearn 和 continent 分组, 统计 lifeExp, 'gdpPercap' 的平均值
df.groupby(['year', 'continent'])['lifeExp', 'gdpPercap'].mean()
# 按 continent 分组, 查看所有的 country (去重)
df.groupby('continent')['country'].nunique()

序列对象

s = pd.Series(['banana', 42])

s = pd.Series(['GZ', 'Creator of Pandas'], index=['Person', 'Who'])
scientists = pd.DataFrame({'Name': ['RRR', 'WWW'], 'Occupation': ['CCC', 'SSS'], 'Born': ['1990-01-01', '1980-02-02'], 'Age': [34, 44]})

# 定义行列名称
scientists = pd.DataFrame({'Occupation': ['CCC', 'SSS'], 'Born': ['1990-01-01', '1980-02-02'], 'Age': [34, 44]}, index=['RRR', 'WWW'], columns=['Occupation', 'Born', 'Age'])
# 大于平均值的年龄
ages[ages > ages.mean()]

# 判断每一个年龄是否大于平均值
ages > ages.mean()
# 过滤
manual_bool_values = [True, True, False, False, True, True, False, False]

# 只保留 True 的值
ages[manual_bool_values]

# 每行相加
ages + ages

# 每行相乘, 要同样维度, 否则就 NaN
ages * ages

# 每行加100
ages + 100

# 每行乘以 2
ages * 2
# 头两个可以正常相加, 后面缺失的 NaN
ages + pd.Series([1, 100])

# numpy 如果维度不一样, 会报错
import numpy as np
ages + np.array([1, 100])

数据框

df[df['Age'] > df['Age'].mean()]

# 创建一个副本
df = df.copy()
# 创建一个新列
df['born_dt'] = born_datetime
import random
random.seed(42)
# 打乱 Age 列  
random.shuffle(df['Age'])
# 通过两列计算一列, 添加到一个新的列
df['age_days_dt'] = df.dide_dt - df.born_dt

# 把天转换成年
df['age_years_dt'] = df.age_days_dt.astype('timedelta64[Y]')

导入导出数据

.pickle 文件是 Python 独有的

# 序列导出到 pickle 文件
names.to_pickle('name_series.pickle')
# 数据框导出到 pickle 文件
df.to_pickle('df.pickle')
series_names_from_pickle = pd.read_pickle('names_series.pickle')
df_from_pickle = pd.read_pickle('df.pickle')

保存到有分割的文件中

names.to_csv('names_series.csy')
names.to_csv('names_series.csy', spe='\t')
df.to_csv('df_series.csy')

序列要保存到 excel, 需要转换成 DataFrame

name_df = names.to_frame()

name_df = to_excel('names_series.xlsx')
df.toexcel('df.xlsx', sheet_name='scientists', index=False)

你可能感兴趣的:(Python,python,pandas,开发语言)