1 读写不同数据源的数据
1.1 文本文件读取与储存
pandas.read_csv(filepath_or_buffer, sep=’,’, header=’infer’, names=None, index_col=None, dtype=None, engine=None, nrows=None)
sep--分隔符,read_csv默认为",",read_table默认为制表符。
header--表示将某行数据作为列名,默认infer为自动识别
names--列名
index_col--索引列位置
DataFrame.to_csv(path_or_buf=None, sep=’,’, na_rep=”, columns=None, header=True, index=True,index_label=None,mode=’w’,encoding=None)
1.2 excel文件读取与储存
pandas.read_excel(io, sheetname=0, header=0, index_col=None, names=None, dtype=None)
dtype--接收字典
DataFrame.to_excel(excel_writer=None, sheetname=None’, na_rep=”, header=True, index=True, index_label=None, mode=’w’, encoding=None)
2 DataFrame常规操作
2.1 查看访问DataFrame中的数据
2.1.1 访问一列
使用字典访问:DataFrame['列名称']
使用访问属性:DataFrame.列名称 #(不推荐)
2.1.2 访问单列多行
访问这一列的前五个元素(含表头):DataFrame['列名称'][:5]
访问多列的多行数据:DataFrame['列名称1','列名称2'][:5]
2.1.3 访问多行数据
DataFrame[:][1:5]
2.1.4 head和tail函数获取多行数据
DataFrame.head()前5行
DataFrame.tail()后5行
默认都是5,可在()内添加访问行数
2.1.5 loc和iloc函数单列切片
DataFrame.loc[:, ‘列名称’]
DataFrame.iloc[:, 列索引]
2.1.6 loc和iloc函数多列切片
DataFrame.loc[:, ['列名称1', '列名称2']]
DataFrame.iloc[:, [1, 3]] #提取第一列和第三列
2.1.7 loc和iloc函数花式切片
DataFrame.loc[2:6, ['列名称1', '列名称2']] # #行名为2-6 列名为列名称1 列名称2的数据
loc函数传入的索引若为区间,则是闭区间
DataFrame.iloc[2:7, [1,3] ] #列位置为1 3 行位置为2-6
iloc函数传入的索引若为区间,则是前闭后开区间
2.1.8 loc和iloc函数条件切片
DataFrame.loc[data_csv["writing score"] == a,['列名称']]
DataFrame.iloc[(data_csv["writing score"] == a).values, [列索引]]
2.2 更改DataFrame中的数据
原理:提取出来,重新赋值,但是会更改原数据
DataFrame.loc[DataFrame['abc']=100, 'abc'] = '1'#将abc中等于100的值换位1
2.3 增添DataFrame中的数据
2.3.1 新增一列非定值
DataFrame['新增列名称'] = DataFrame['列名称1']*DataFrame['列名称2']
2.3.2 新增一列定值
DataFrame['新增列名称'] = '新增列的值'
2.3.3 指定位置插入列
DataFrame.insert(列索引, 列名称, 数据, allow_duplicates=False)
最后一项参数为,是否允许列名重复
2.3.4 指定位置插入行
pd.append() 只能实现在最后增加一行,需要将原始的DataFrame拆分,再插入数据后将其合并。
# 待插入行索引
row_n = 1
# 待插入数据,以一维列表为例
d = [["*"] * 4]
# 拆分
DataFrame1 = [:row_n]
DataFrame2 = [row_n:]
# 参数:添加数据,是否无视行索引
DataFrame = DataFrame1.append(d,ignore_index=True).append(DataFrame2,ignore_index=True)
def df_insert(df, n, arr, ignore_index=True):
"""
DataFrame任意位置添加一行
:param df: DataFrame
:param n: 添加行号索引
:param arr: 添加数据
:param ignore_index: 是否无视行索引,为True则重新从0生成df的行号
:return: DataFrame
"""
# 如果原df列名被修改,则需要给新插入的行也赋予列名
# arr = pd.DataFrame(np.array(arr).reshape((1, len(arr))), columns=df.columns)
# 否则直接插入二维数组即可
arr = [arr]
df1 = df[:n]
df2 = df[n:]
df0 = df1.append(arr, ignore_index).append(df2, ignore_index)
return df0
# 待插入行索引
row_n = 1
# 待插入数据,以一维列表为例
d = ["*"] * 4
# 调用方法
pd_arr = df_insert(pd_arr, row_n, d)
2.4 删除DataFrame中的数据
DataFrame.drop(labels, axis, inplace)
labels--删除行或者列的标签
axis--0为横轴 1为纵轴,默认为0
inplace--操作是否对原数据生效,默认为False
2.4.1 删除列
labels为列标签
2.4.2 删除行
labels为行索引,可用range函数
2.5 描述分析DataFrame
2.5.1 数据型特征的描述性统计
中位数median 极差ptp 标准差std 协方差cov
1)np.mean求某一列的均值
np.mean(DataFrame['列名称'])
2)pandas实现求某一列均值
DataFrame['列名称'].mean()
3)describe函数实现数值型特征的描述性统计
DataFrame[['列名称1', '列名称2']].discribe()
2.5.2 类别型特征的描述性统计
sem标准误差 skew样本偏差 quantile四分位数 mode众数 kurt样本峰值
对某一类频数出现前十名进行统计
DataFrame['列名称'].value_counts()[0: 10]