pandas

import pandas as pd
a = [1, 2, 3, 4]
p = [1, 2, 3, 4]
r = [1, 2, 3, 4]
f = [1, 2, 3, 4]
df = pd.DataFrame({'a':a, 'p':p, 'r':r, 'f':f}, index=['LSTM_FCN', 'LSTM_MCNN', 'BiLSTM_FCN','BiLSTM_MCNN'])
print(df)
df.to_csv("./result/result.csv", index=True)

result = all_metric(y_trues, y_preds, method_name=method_name)
df = pd.read_csv('./result/result.csv', index_col=0)
df.loc[method_name] = result
print(df)
df.to_csv("./result/result.csv", index=True)
plot_confusion_matrix(y_trues, y_preds, svg_name='./result/{}'.format(method_name))

导入数据

  • pd.read_csv(filename,encoding='gbk',sep='\t'):从CSV文件导入数据

读取tsv文件
data = pd.read_csv(filename, sep='\t').values

  • pd.read_table(filename):从限定分隔符的文本文件导入数据
  • pd.read_excel(filename):从Excel文件导入数据
  • pd.read_sql(query, connection_object):从SQL表/库导入数据
  • pd.read_json(json_string):从JSON格式的字符串导入数据
  • pd.read_html(url):解析URL、字符串或者HTML文件,抽取其中的tables表格
  • pd.read_clipboard():从你的粘贴板获取内容,并传给read_table()
  • pd.DataFrame(dict):从字典对象导入数据,Key是列名,Value是数据

生成DataFrame

iris_data = pd.DataFrame( iris.data, 
                          columns=iris.feature_names )
iris_data['species'] = iris.target_names[iris.target]
iris_data.head(3).append(iris_data.tail(3))

分箱

group_names = ['不及格','及格','良','优秀']
cuts = pd.cut(scores,grades,labels=group_names)

将成绩均匀的分在四个等长的箱子中,precision=2的选项将精度控制在两位

cuts = pd.cut(scores,4,precision=2)

qcut()可以生成指定的箱子数,然后使每个箱子都具有相同数量的数据


pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

frame:要处理的数据集。
id_vars:不需要被转换的列名。
value_vars:需要转换的列名,如果剩下的列全部都要转换,就不用写了。
var_name和value_name是自定义设置对应的列名。
col_level :如果列是MultiIndex,则使用此级别。

d = {'col1': ['a','a','a','b','b'], 'col2': [2,2,2,2,2],'col3':['c','c','c','d','d']}
df = pd.DataFrame(data=d)
pd.melt(df,id_vars=['col2'],value_vars=['col1'],var_name='hi',value_name='hello')

取行、列

loc函数:通过行索引 "Index" 中的具体值来取行数据(如取"Index"为"A"的行)
iloc函数:通过行号来取行数据(如取第二行的数据)

data=pd.DataFrame(np.arange(16).reshape(4,4),index=list('abcd'),columns=list('ABCD'))

取索引为'a'的行
In[2]: data.loc['a']
取第一行数据,索引为'a'的行就是第一行,所以结果相同
In[3]: data.iloc[0]

取'A'列所有行,多取几列格式为 data.loc[:,['A','B']]
In[4]:data.loc[:,['A']] 
取第0列所有行,多取几列格式为 data.iloc[:,[0,1]]
In[5]:data.iloc[:,[0]] 

删除插入

删除gender列,不改变原来的data数据,返回删除后的新表data_2。axis为1表示删除列,0表示删除行。inplace为True表示直接对原表修改。
data_2 = data.drop('gender', axis=1, inplace=False)
改变某一列的位置。如:先删除gender列,然后在原表data中第0列插入被删掉的列。
data.insert(0, '性别',data.pop('gender'))
pop返回删除的列,插入到第0列,并取新名为'性别'
直接在原数据上删除列
del data['性别']

one-hot

pd.get_dummies(
data,
prefix=None,
prefix_sep='_',
dummy_na=False,
columns=None,
sparse=False,
drop_first=False,
dtype=None,
)

pd.get_dummies(all_df['MSSubClass'], prefix='MSSubClass').head()

pandas.melt(frame, id_vars=None, value_vars=None, var_name=None, value_name='value', col_level=None)

参数解释:
frame:要处理的数据集。
id_vars:不需要被转换的列名。
value_vars:需要转换的列名,如果剩下的列全部都要转换,就不用写了。
var_name和value_name是自定义设置对应的列名。
col_level :如果列是MultiIndex,则使用此级别。


pd.melt(df,id_vars=['col2'],value_vars=['col1'],var_name='hi',value_name='hello')

profile

数据整体概览、变量探索、相关性计算、缺失值情况和抽样展示

profile= pandas_profiling.ProfileReport(adult)
profile.to_file(outputfile = "output_file.html")

合并

https://blog.csdn.net/weixin_42782150/article/details/89546357

pd.concat([df1,df2],sort=False)

axis :默认为0,为按行拼接;1 为按列拼接
ignore_index: 默认为False,会根据索引进行拼接;True 则会忽略原有索引,重建新索引
join: 为拼接方式,包括 inner,outer
sort: True 表示按索引排序



merge函数

how:数据合并的方式。

left:基于左dataframe列的数据合并;right:基于右dataframe列的数据合并;outer:基于列的数据外合并(取并集);inner:基于列的数据内合并(取交集);默认为'inner'。

on:基于相同列的合并
left_on/right_on:左/右dataframe合并的列名。
left_index/right_index:是否以index作为数据合并的列名,True表示是。
sort:根据dataframe合并的keys排序,默认是。
suffixes:若有相同列且该列没有作为合并的列,可通过suffixes设置该列的后缀名,一般为元组和列表类型



Groupby

#创建一个DataFrame
import pandas as pd
import numpy as np
rng=np.random.RandomState(0)
df=pd.DataFrame({'key':list('ABCABC'),'data1':range(6),'data2':rng.randint(0,10,6)})
 
#输出的结果是这样的

data1 data2 key
0 0 5 A
1 1 0 B
2 2 3 C
3 3 3 A
4 4 7 B
5 5 9 C

然后我们分别用apply,agg,transform三个函数去处理分组对象:

#创建一个分组的迭代器
grouped=df.groupby('key') 
#补充一下,如果大家想看grouped到底把原DataFrame分成什么样子了,可以试试以下代码(实际是一个含分组标签和分组DataFrame的元祖,括号使用的是元组的拆分属性)
for (key,group) in grouped:
    print(key)
    print(group)

A
data1 data2 key
0 0 5 A
3 3 3 A
B
data1 data2 key
1 1 0 B
4 4 7 B
C
data1 data2 key
2 2 3 C
5 5 9 C

#使用apply
grouped.apply(sum)

key data1 data2 key
A 3 8 AA
B 5 7 BB
C 7 12 CC

#使用agg
grouped.agg(sum)

key data1 data2
A 3 8
B 5 7
C 7 12

#使用transform
grouped.transform(sum)

data1 data2
0 3 8
1 5 7
2 7 12
3 3 8
4 5 7
5 7 12

DataFrame.sample(n=None, frac=None, replace=False, weights=None, random_state=None, axis=None)

n,要抽取的行数
random_state,确保可重复性
frac,抽取行的比例
replace,是否为有放回抽样True:有放回抽样
weights,字符索引或概率数组axis=0:为行字符索引或概率数组axis=1:为列字符索引或概率数组
axis,选择抽取数据的行还是列axis=0:抽取行axis=1:抽取列

导出数据

df.to_csv(filename):导出数据到CSV文件
df.to_excel(filename):导出数据到Excel文件
df.to_sql(table_name, connection_object):导出数据到SQL表
df.to_json(filename):以Json格式导出数据到文本文件

创建测试对象

pd.DataFrame(np.random.rand(20,5)):创建20行5列的随机数组成的DataFrame对象
pd.Series(my_list):从可迭代对象my_list创建一个Series对象
df.index = pd.date_range('1900/1/30', periods=df.shape[0]):增加一个日期索引

查看、检查数据

df.head(n):查看DataFrame对象的前n行
df.tail(n):查看DataFrame对象的最后n行
df.shape:查看行数和列数
df.info():查看索引、数据类型和内存信息
df.describe():查看数值型列的汇总统计
s.value_counts(dropna=False):查看Series对象的唯一值和计数
df.apply(pd.Series.value_counts):查看DataFrame对象中每一列的唯一值和计数

数据选取

s.iloc[0]:按位置选取数据
s.loc['index_one']:按索引选取数据

df.query("(age==18)&(sex=='male)")条件选取

数据清理

df.columns = ['a','b','c']:重命名列名
pd.isnull()
pd.notnull()
df.dropna():删除所有包含空值的行
df.dropna(axis=1):删除所有包含空值的列
df.dropna(axis=1,thresh=n):删除所有小于n个非空值的行
df.fillna(x):用x替换DataFrame对象中所有的空值
s.astype(float):将Series中的数据类型更改为float类型
s.replace(1,'one'):用‘one’代替所有等于1的值
s.replace([1,3],['one','three']):用'one'代替1,用'three'代替3
df.rename(columns=lambda x: x + 1):批量更改列名
df.rename(columns={'old_name': 'new_ name'}):选择性更改列名
df.set_index('column_one'):更改索引列
df.rename(index=lambda x: x + 1):批量重命名索引

数据处理:Filter、Sort和GroupBy

s.T转置
df[df[col] > 0.5]:选择col列的值大于0.5的行

df.sort_values(col1):按照列col1排序数据,默认升序排列
df.sort_values([col1,col2], ascending=[True,False]):先按列col1升序排列,后按col2降序排列数据

df.groupby(col):返回一个按列col进行分组的Groupby对象
df.groupby([col1,col2]):返回一个按多列进行分组的Groupby对象
df.groupby(col1)[col2]:返回按列col1进行分组后,列col2的均值
df.pivot_table(index=col1, values=[col2,col3], aggfunc=max):创建一个按列col1进行分组,并计算col2和col3的最大值的数据透视表
df.groupby(col1).agg(np.mean):返回按列col1分组的所有列的均值
data.apply(np.mean):对DataFrame中的每一列应用函数np.mean
data.apply(np.max,axis=1):对DataFrame中的每一行应用函数np.max

数据合并

df.concat([df1, df2],axis=1):将df2中的列添加到df1的尾部
df1.join(df2,on=col1,how='inner'):对df1的列和df2的列执行SQL形式的join

数据统计

df.describe():查看数据值列的汇总统计
df.mean():返回所有列的均值
df.corr():返回列与列之间的相关系数
df.count():返回每一列中的非空值的个数
df.median():返回每一列的中位数

df.unique()所有值
df.cumsum()累加
pd.cut(df.salary, bins=10)分桶

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,294评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,780评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,001评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,593评论 1 289
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,687评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,679评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,667评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,426评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,872评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,180评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,346评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,019评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,658评论 3 323
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,268评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,495评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,275评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,207评论 2 352

推荐阅读更多精彩内容