1.数据导入 pandas提供了一些用于将表格型数据读取为DataFrame对象的函数 函数 描述 read_csv 从文件、url或者文件型对象读取分割好的数据,逗号是默认分隔符 read_table 从文件、url或者文件型对象读取分割好的数据,制表符(' ')是默认分隔符 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}) # 替换不同的值,通过字典