1.数据导入
pandas提供了一些用于将表格型数据读取为DataFrame对象的函数
函数 描述
read_csv 从文件、url或者文件型对象读取分割好的数据,逗号是默认分隔符
read_table 从文件、url或者文件型对象读取分割好的数据,制表符('\t')是默认分隔符
read_fwf 读取定宽格式数据(无分隔符)
read_clipboard 读取剪贴板中的数据,可以看做read_table的剪贴板。再将网页转换为表格
read_excel 从Excel的XLS或者XLSX文件中读取表格数据
read_hdf 读取pandas写的HDF5文件
read_html 从HTML文件中读取所有表格数据
read_json 从json字符串中读取数据
read_pickle 从Python pickle格式中存储的任意对象
read_msgpack 二进制格式编码的pandas数据
read_sas 读取存储于sas系统自定义存储格式的SAS数据集
read_stata 读取Stata文件格式的数据集
read_feather 读取Feather二进制文件格式
read_sql 将SQL查询的结果(SQLAlchemy)读取为pandas的DataFrame
相关参数
参数 描述
path 表明文件系统位置的字符串、URL或者文件型对象
sep或delimiter 用于分隔每行字段的字符序列或正则表达式
header 用作列名的行号,默认是0(第一行),如果没有为None
names 结果的列名列表,和header=None一起用
skiprows 从文件开头起,需要跳过的行数或者行号列表
na_values 用NA替换的值序列(可以用来处理缺失值)
data_parser 用于解析日期的函数
nrows 从文件开头处读取的行数
chunksize 用于设置迭代的块大小
encoding 设置文本编码
-1.read_csv
csv文件就是一个以逗号分隔字段的纯文本文件,用于测试的文件是本身是一个Excel文件,
需要修改一下扩展名,但是简单的修改后缀名不行,还需要将字符编码改变为utf-8,因为默认
的是ASCII,否则是会报错的。然后就可以通过read_csv将它读入到一个DataFrame对象;
import pandas as pd
#默认列名
df = pd.read_csv("E:/Test/test3.csv",,header=None)
df
name age sex
0 佩奇 18 女
1 乔治 19 男
pd.head()#默认显示前五条
#指定列名
import pandas as pd
df = pd.read_csv("E:/Test/test.csv",names=['数','据','分','析','真','好','玩'])
df
-2.read_html('url') 从HTML文件中读取所有表格数据
2.数据转化
1、删除重复值
data = pd.DataFrame({"k1":['one','two'] * 3 + ['two'],
"k2":[1,1,2,3,3,4,4]})
data
运行结果:
k1 k2
0 one 1
1 two 1
2 one 2
3 two 3
4 one 3
5 two 4
6 two 4
-----------------------------------------------
data.duplicated() # 返回一个布尔型Series,表示各行是否是重复行
0 False
1 False
2 False
3 False
4 False
5 False
6 True
dtype: bool
-----------------------------------------------
data.drop_duplicates() # 返回一个DataFrame,重复的数组会标为False
k1 k2
0 one 1
1 two 1
2 one 2
3 two 3
4 one 3
5 two 4
# 重复的行被删除了
-----------------------------------------------
以上方法是针对全部列,还可以通过传入参数对部分指定列进行重复项判断。
data['v1'] = range(7) # 添加一个v1列
data.drop_duplicates(['k1','k2']) # 可以传入一个列表,指定列,默认保留第一个出现的值组合
k1 k2 v1
0 one 1 0
1 two 1 1
2 one 2 2
3 two 3 3
4 one 3 4
5 two 4 5
-----------------------------------------------
data.drop_duplicates(['k1','k2'],keep='last') # 默认保留最后一个出现的值组合
k1 k2 v1
0 one 1 0
1 two 1 1
2 one 2 2
3 two 3 3
4 one 3 4
6 two 4 6
2、使用函数或映射进行数据转换
data = pd.DataFrame({"goods":['Iphone','HUAWEI','SAMSUNG','MI','OPPO'], "price":[6000,4000,5000,3000,3000]})
data
运行结果:
goods price
0 Iphone 6000
1 HUAWEI 4000
2 SAMSUNG 5000
3 MI 3000
4 OPPO 3000
现在有这样一组数据,假设现在需要加上一列数据。将每样商品的出产国家加上
# 先定义一个不同商品到产地的映射
produce_nation = {
"iphone":'America',
"huawei":'China',
"samsung":'Korea',
"mi":'China',
"oppo":'China'
}
# 因为定义的商品全是大写,需要全部转换为小写
lower_cased = data['goods'].str.lower()
# 通过map映射添加一列出产国家数据
data['nation'] = lower_cased.map(produce_nation)
运行结果:
goods price nation
0 Iphone 6000 America
1 HUAWEI 4000 China
2 SAMSUNG 5000 Korea
3 MI 3000 China
4 OPPO 3000 China
也可以通过一个函数完成这些工作:
data['goods'].map(lambda x:produce_nation[x.lower()])
运行结果:
0 America
1 China
2 Korea
3 China
4 China
Name: goods, dtype: object
3、替换值
利用fillna()方法填充缺失数据是值替换的一种特殊情况。接下来可以使用replace方法进行替换值操作。
data = pd.Series([1., -999., 2., -999., -1000., 3.])
data # 生成一个Series数组
运行结果:
0 1.0
1 -999.0
2 2.0
3 -999.0
4 -1000.0
5 3.0
dtype: float64
----------------------------------------------
# 其中-999可能是缺失值的某一标识,需要使用NA替代这些值
1、
data.replace(-999, np.nan) # 通过replace产生一个新的Series,除非传入inplace=True
运行结果:
0 1.0
1 NaN
2 2.0
3 NaN
4 -1000.0
5 3.0
dtype: float64
2、
data.replace([-999, -1000], np.nan) # 一次性替换多个值
3、
data.replace([-999, -1000], [np.nan, 0]) # 替换不同的值,通过列表
4、
data.replace({-999: np.nan, -1000: 0}) # 替换不同的值,通过字典