#.pandas
文章目录
# coding=utf8
import numpy as np
import pandas as pd
# CSV是文本文件,用记事本就能打开。XLS 是二进制的文件只有用 EXCEL 才能打开;
# CSV 文件格式只能保存活动工作表中的单元格所显示的文本和数值。数据列以逗号分隔,每一行数据都以回车符结束。如果单元格中包含逗号,则该单元格中的内容以双引号引起。
# 如果单元格显示的是公式而不是数值,该公式将转换问文本方式。所有格式、图形、对象和工作表的其他内容将全部丢失。
# 若只是保存一点文本信息用,CSV 文件就可以了,但是若有设定公式,冻结列等其他东西则用 XLS。
# 1、导入csv或者xlsx文件
df = pd.DataFrame(pd.read_csv('stock.csv', header=0))
# df = pd.DataFrame(pd.read_excel('name.xlsx'))
df2 = pd.DataFrame({"id": [1001, 1002, 1003, 1004, 1005, 1006],
"date": pd.date_range('20130102', periods=6),
"city": ['Beijing ', 'SH', ' guangzhou ', 'Shenzhen', 'shanghai', 'BEIJING '],
"age": [23, 44, 54, 32, 34, 32],
"category": ['100-A', '100-B', '110-A', '110-C', '210-A', '130-F'],
"price": [1200, np.nan, 2133, 5433, np.nan, 4432]},
columns=['id', 'date', 'city', 'category', 'age', 'price'])
df3 = pd.DataFrame(pd.read_csv('students.csv', header=0))
# 2、数据表信息查看
# print(df.shape) # 维度
# print(df.info()) # 基本信息
# print(df.dtypes) # 每一列数据的格式
# print(df.values) # 查看数据表的值
# print(df.columns) # 查看列名称
# print(df.head()) # 前5行数据
# print(df.tail()) # 后5行数据
# print(df['Date'].dtype) # 某一列格式
# print(df.isnull()) # 空值
# print(df['Date'].isnull()) # 查看某一列空值
# print(df['Price'].unique()) # 查看某一列的唯一值
# 3、数据表清洗
# df3 = df3.fillna(value=0) # 用数字0填充空值
# df3['age'] = df3['age'].fillna(df3['age'].mean()) # 使用列prince的均值对NA进行填充
# df3['name'] = df3['name'].map(str.strip) # 除city字段的字符空格
# df3['name'] = df3['name'].str.upper() # 大小写转换
# df3['name'] = df3['name'].drop_duplicates() # 删除后出现的重复值,NaN
# df3['name'] = df3['name'].drop_duplicates(keep='last') # 删除先出现的重复值,NaN
# df3['id'].astype('int') # 更改数据格式
# df3 = df3.rename(columns={'like': 'preference'}) # 更改列名称
# df3['name'] = df3['name'].replace('xiaoli', 'xiaohan') # df3['name']
# 4、数据预处理
df4 = pd.DataFrame({"id": [3, 4, 5, 6],
"name": ['xiaoli', 'dahong', 'daqiang', 'dahan'],
"age": [14, 22, np.nan, 24],
"like": ['play', 'book', 'run', 'play']})
df5 = pd.DataFrame({"pay": ['Y', 'Y', 'N', 'N']}, index=[3, 4, 5, 7])
# 数据表合并
df_inner = pd.merge(df3, df4, how='inner') # 交集
df_outer = pd.merge(df3, df4, how='outer') # 并集
df_merge = df3.append(df4) # 合并
df_join = df4.join(df5, on='id') # 右表的索引是左表某一列值
df_concat = pd.concat([df3, df4, df5]) # 多数据表合并
# 排序
df_merge = df_merge.sort_values(by=['name']) # 按照特定列的值排序
df_merge = df_merge.set_index('id') # 设置索引列
# df_merge = df_merge.reset_index() # 取消索引列
df_merge = df_merge.sort_index() # 按照索引列排序
df_merge['adult'] = np.where(df_merge['age'] > 15, 'Yes', 'No') # 新增列,条件判断
df_merge.loc[(df_merge['name'] == 'xiaoli') & (df_merge['age'] >= 14), 'sign'] = 1 # 新增列,标记
df_merge_name = pd.DataFrame((x.upper() for x in df_merge['name']), index=df_merge.index, columns=['name']) # x.upper()结果创建新数据表
# 5、数据提取
# print(df_merge.loc[0]) # 提取第一行数值
# print(df_merge.iloc[0:5]) # 提取第一行到第五行数值
# print(df_merge[:6]) # 提取前6行数据
# print(df_merge.iloc[:5, :3]) # 前5行,前3列
# print(df_merge.iloc[[1, 2, 4], [0, 1]]) # 2,3,5行,1,2列
# print(df_merge['age'].isin([14])) # 判断age列的值是否为14
# print(df_merge.loc[df_merge['age'].isin([14, 24])]) # 筛选出符合条件数据
# print(pd.DataFrame(df_merge['name'].str[:3])) # 提取前三个字符,并生成数据表
# 6、数据筛选
# & | != 与或非
# print(df_merge.loc[(df_merge['age'] > 10) & (df_merge['name'] == 'xiaoli'), ['name', 'age', 'like', 'adult']])
# print(df_merge.loc[(df_merge['age'] > 10) & (df_merge['name'] == 'xiaoli'), ['name', 'age', 'like', 'adult']].age.count())
# print(df_merge.query('name == ["xiaoli", "xiaohong"]')) # query筛选
# print(df_merge.query('name == ["xiaoli", "xiaohong"]').age.sum()) # 筛选完求和
# 7、数据汇总
# print(df_merge.groupby('name').count()) # 按照指定列进行数据统计
# print(df_merge.groupby('name')['age'].count()) # 按照指定列指定字段进行数据统计
# print(df_merge.groupby(['name', 'age']).count()) # 多列统计
# print(df_merge.groupby('name')['age'].agg([len, np.sum, np.mean])) # 个数、和、平均值
# 8、数据统计
# 采样、标准差、协方差、相关性
# 9、数据输出
df_merge.to_excel('students_write.xlsx', sheet_name='test')
df_merge.to_csv('students_write.csv')