Pandas的数据结构
-
Series ——
DataFrame
中的一行-
Series
的构造方法pandas.Series(data, index, dtype, name, copy) """ data:一组数据 index:索引,默认为从0开始的自然数 dtype:数据类型,默认会自己判断 name:设置名称 copy:拷贝数据,默认为 False """
-
也可通过
dict
的{key: value}
创建import pandas as pd dic = {key1: value1, key2: value2, key3: value3} ds = pd.Series(dic)
-
-
DataFrame —— 表格型的数据结构
-
DataFrame
的构造方法pandas.DataFrame(data, index, columns, dtype, copy) """ columns:列标签,默认为RangeIndex(0, 1, 2, …, n) 其余的同Series """
-
也可通过
dict
的{key: value}
创建(无论哪种结构,key总为列标签)import pandas as pd data = [{key1: value1, key2: value2}, {key3: value3, key4: value4, key5: value5}] df = pd.DataFrame(data)
import pandas as pd data = {key1: value1, key2: value2} # value均为list df = pd.DataFrame(data)
-
loc
返回指定数据df[col_index] # 返回指定列,返回多列用[[...]] df.loc[row_index] # 返回指定行的数据,返回多行用[[...]] df.loc[row_index, col_index] # 返回指定数据
-
Pandas对csv操作
-
读取与保存
import pandas as pd dc = pd.read_csv(file_path) # 读取csv文件 df.save_csv(file_path) # 保存为csv文件
-
对读取数据的基本操作
print(dc.to_string()) # 用于返回DataFrame类型的数据(如果不使用,则输出保留前后5行) print(dc.head(n)) # 用于返回前n行数据,默认为5 print(dc.tail(n)) # 用于返回后n行数据,默认为5 print(dc.info()) # 返回表格基本信息(类似于数据库列信息)
Pandas对json操作
-
读取
json
import pandas as pd df = pd.read_json(file_path) # 从文件读取 df = pd.read_json(url) # 从url读取
-
内嵌的
json
数据col_index1
写需要展开的列索引;
col_index2
写需要展示却不在展开内容之内的索引;
若含多级索引,则col_index1
和col_index2
可以写成[col_1, col_2, col_3]
。
(col_index
用来表示同级索引,col
用来表示多级索引,全文同)import pandas as pd import json # 使用json模块载入数据 with open('nested_list.json','r') as f: data = json.loads(f.read()) # 展平数据 df_nested_list = pd.json_normalize( data, record_path = [col_index1] # record_path用于展开内嵌JSON数据的列 meta=[col_index2] # 没有包含的元素,可以用meta参数来显示这些元数据 )
-
读取内嵌套数据中的一组数据
import pandas as pd from glom import glom df = pd.read_json(file_path) data = df[col_1].apply(lambda row: glom(row, col_2))
Pandas数据清洗
-
读取csv时指定空数据的形式
import pandas as pd missing_values = ["n/a", "na", "--"] dc = pd.read_csv(file_path, na_values = missing_values)
-
清除空数据
DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False) """ axis:默认为0,表示逢空值剔除整行,如果设置参数axis=1表示逢空值去掉整列; how:默认为'any'如果一行(或一列)里任何一个数据有出现NaN就去掉整行,如果设置how='all'一行(或列)都是NaN才去掉这整行; thresh:设置需要多少非空值的数据才可以保留下来的; subset:设置想要检查的列。如果是多个列,可以使用列名的list作为参数; inplace:如果设置 True,修改的是源数据。 """
dc.isnull() # 判断各个单元格是否为空 dc.dropna() # 删除包含空数据的行 dc.drop(col_index, inplace=True) # 清除某一行
-
内容替换
dc.fillna(content, inplace = True) # 替换一些空字为content dc.loc[row_index, col_index] = content # 修改指定数据为content dc['Date'] = pd.to_datetime(df['Date']) # 时间列格式清洗
-
重复数据
dc.duplicated() # 查看哪些行是重复数据 dc.drop_duplicates(inplace=True) # 清洗重复数据