这些操作在网上都可以百度得到,为了便于记忆自己再根据理解总结在一起。---------励志做一个优雅的网上搬运工
1.建立dataframe
(1)Dict to Dataframe
df = pd.DataFrame({'key1':['a','a','b','b','a'],'key2':['one','two','one','two','one'],'data1':np.random.randn(5),'data2':np.random.randn(5)})
df
data1 data2 key1 key2
0 -0.484486 -1.404184 a one
1 -1.541437 0.549591 a two
2 -0.015287 -1.589111 b one
3 -0.069614 -0.513824 b two
4 -0.704788 0.395147 a one
(2)Series to Dataframe
df2=pd.DataFrame(np.arange(16).reshape((4,4)),index=['one','two','three','four'],columns=['a','b','c','d'])
df2
a b c d
one 0 1 2 3
two 4 5 6 7
three 8 9 10 11
four 12 13 14 15
(3)pd.read_csv() ; pd.to_csv();
pd.read_excel() ; pd.to_excel()
(4)建立一个新的空的dataframe
df_empty = pd.DataFrame(columns=['A', 'B', 'C', 'D'])
列表生成器
[x for x in range(0,5)]
[0, 1, 2, 3, 4]
2.dataframe基本操作
(1)逻辑运算取行数:df[df['data1']>0]
(2)规则运算取行数:
df2.loc[[2]]
data1 data2 key1 key2
2 0.025434 0.119642 b one
df2.iloc[[2]]
data1 data2 key1 key2
2 0.025434 0.119642 b one
一个是按照index的序值,一个是按照index具体值
取前两行:df[:,2]
(3)取指定的几列
df = df[0:(len(df) - 1)] # 取df的前n-1行
取某两列:df[[column1,column2]]
不指定列名取前四百列:df.iloc[:,0:400] (4)取满足条件的几行
yy=data[(data['Ch']==8027)& (data['PlaceNo']==6)]
df.loc[(df['AxleNo'] == 5) & (df['PlaceNo'] == 1) & (df['ResultMark'].isin([4,196,1028, 16388])), 'Alarm'] = 7 # 修改满足条件行的
(5)按列拼接
https://morvanzhou.github.io/tutorials/data-manipulation/np-pd/3-6-pd-concat/
pd.concat(objs, axis=0, join='outer', join_axes=None, ignore_index=False,
keys=None, levels=None, names=None, verify_integrity=False,
copy=True)
pd.concat([df2,df2],axis=0)
objs:待合并的对象集合,可以是Serice,Dataframe
axis:{0,1,...}合并方向,默认为0,表示纵向,1表示横向
join:{inner,outer}:合并方式,默认为outer,表示并集,inner表示交集
join_axes:按哪些对象的索引保存
ignore_index:{False,True},是否忽略原index,默认为不忽略
keys:为原始dataframe添加一个键,默认为无
ndarray的拼接,np.vstack((a,b));
np.hstack((a,b))
merge方法同样可实现,merge(df1,df2),没有指定连接列名默认将重复的列当作键
merge(df1,df2,on=['key1','key2'])
merge(df1,df2,rigth_on=,left_on=)当列名不相同时同样可以进行合并
删除重复的行
df.drop_duplicates() #删除所有列完全重合的行
df.drop_duplicates(['key1','key2']) #删除列1和列2重复的行
(6)按行拼接
result = df1.append(df2)
(7)修改索引
# inplace=Ture,在DataFrame上修改数据,而不是返回一个新的DataFrame
df1.reindex(['a','b','c','d','e'], inplace=Ture)
修改列的排列顺序
df1.reindex(columns=columns)
x=x.reset_index() #将索引从新排列,但是会自动生成原来索引内容的index一列
3.groupby
(1)按照关键字分类,如果不使用mean().sum()函数的话,是一个group类型的数据
df2 = pd.DataFrame({'key1':['a','a','b','b','a'],'key2':['one','two','one','two','one'],'data1':np.random.randn(5),'data2':np.random.randn(5)})
df2.groupby('key1').mean()
data1 data2
key1
a 0.067198 0.650162
b 0.040813 0.126698
df2.groupby(['key1','key2']).mean()
data1 data2
key1 key2
a one 0.373335 0.944841
two -0.545078 0.060804
b one 0.025434 0.119642
two 0.056192 0.133754
补上df2
df2
data1 data2 key1 key2
0 -0.511381 0.967094 a one
1 -0.545078 0.060804 a two
2 0.025434 0.119642 b one
3 0.056192 0.133754 b two
4 1.258052 0.922588 a one
(2)对group数据再进行函数操纵apply(),agg()
apply()应用所有数据
df2.groupby('key1').apply(np.mean)
data1 data2
key1
a 0.067198 0.650162
b 0.040813 0.126698
agg()应用某一列
group2=df2.groupby('key1')
group2
<pandas.core.groupby.DataFrameGroupBy object at 0x000001C6A964D518>
group2['data1'].agg('mean')
key1
a 0.067198
b 0.040813
3.组合合并
(1)dataframe中其中两列按照一定格式合并并生成新的一列
df['经纬度']=df[['经度','纬度']].apply(lambda x:"{:.3f},{:.3f}".format(*x),axis=1)
Temp_data['轴位']=Temp_data['轴号'].map(str)+Temp_data['位号'].map(str)
(2)两个dataframe表通过字段进行匹配组合成新表
1.merge方法
pandas.merge(df1,df2,on=['key1','key2'],how=‘inner’)
how有inner、outer、left和right四个选项,分别表示并集,交集,按左连接和按右链接,默认为inner
2.combin方法
3.join方法
4.concat方法
pandas.concat([df1,df2,df3])是默认在纵向堆叠,列数不会增加。
pandas.concat([df1,df2,df3],axis=1,join='inner')会把每个DataFrame的列放在一起,按index识别
4.pivot_table 透视表
pd.pivot_table(df2, index='key1', columns='key2')
data1 data2
key2 one two one two
key1
a 0.373335 -0.545078 0.944841 0.060804
b 0.025434 0.056192 0.119642 0.133754
df2.pivot_table(['data1'], index='key1',columns='key2')
data1
key2 one two
key1
a 0.373335 -0.545078
b 0.025434 0.056192
5.其他
(1)编码
系统自动编码:y = np.array(pd.Categorical(data['quality']).codes)
自己指定映射:data['category'] = data['quality'].map({"轻度污染":1,"中度污染":2})
(2)替换
c = df['AreaId'].replace(-1, 0) 将AreaId一列中-1的数替换成0
c = df['AreaId'].replace([-1,2,4,8], 0) 将AreaId一列中某些数据替换成0
(3)更改列名字
df = df.rename(columns={'DeviceName_湿度_DataValue_Mean_Mean': '湿度'})
(4)排序
df.sort_index(inplace=True) #将index排序
df=df.sort_index(by='timepoint') # index后续会被values替代,这两行都是对dataframe中某一列进行排序
df=df.sort_values(by='timepoint')
(5)更改列的数据类型
修改整个数据框类型:df=pd.DataFrame(df,dtype='float').replace(0,np.nan).mean(1)
mean(1)是求行平均, (6)其他地方收集到的神操作
if df['实发工资']>10000:
df['实发工资']=df['应发工资']+20000
df['实发工资'] = df['应发工资'].applay(lambda x:x+20000 if x>10000 else x)
(7)根据列的值从DataFrame中选择行
要选择列的值等于某个值"some_value"的行
,请使用==
:
df.loc[df['column_name'] == some_value]
要选择列值在链表some_values
中的行,请使用isin
:
df.loc[df['column_name'].isin(some_values)]
将多个条件与&
组合使用:
df.loc[(df['column_name'] == some_value) & df['other_column'].isin(some_values)]
要选择列值不等于some_value
的行,请使用!=
:
df.loc[df['column_name'] != some_value]
isin
返回一个布尔序列,因此要选择其值不在some_values
中的行,使用~
取反布尔序列:
df.loc[~df['column_name'].isin(some_values)]
(8)dataframe根据多列的条件判断生成新的一列
df['temp_tag']=df.apply(lambda x: (1 if x['12']-x['Ireference']>=55 else 0), axis=1)
df['次高温差'] =df.apply(lambda x:(max(x['12'],x['22'],x['32'],x['42'],x['52'],x['62'])-np.sort([x['12'],x['22'],x['32'],x['42'],x['52'],x['62']])[4]),axis=1)
6.读取文件
可查看原网站地址:https://i.cnblogs.com/EditPosts.aspx?postid=8323763
1.读取excel
import pandas as pd
from pandas import DataFrame,Series # 指定分隔符,也可用delimiter,读取前10行数据
pd.read_table('filename', sep=',',nrows=10)
# 读取特定大小的文件块(byte)
pd.read_table('filename', chunksize=1000) # 读入DataFrame时,指定列名
pd.read_csv('filename', header=None)
pd.read_csv('filename', names=['a','b','c','d']) # 指定列为索引,列d设为索引
pd.read_csv('filename', names=['a','b','c','d'], index_col='d')
# 层次化索引的话,可以index_col指定多个列名
pd.read_csv('filename', names=['a','b','c','d'], index_col=['c','d']) # 跳过文件的某些行
pd.read_csv('filename', skiprows=[1,3,6])
# 需要忽略的行数,从尾部算起
pd.read_csv('filename', skip_footer=10) # 读文件缺失值处理,将文件中某些值设置为nan
pd.read_csv('filename', na_values=['NULL'])
# 将文件中满足box条件的值设置为nan
box = {'col1':['foo','NA'], 'col3':['two']}
pd.read_csv('filename', na_values=['NULL'])
# 写文件缺失值处理,将nan写成na_rep
pd.read_csv('filename', na_rep='NULL') # 日期解析,解析所有列,也可以指定,默认为False;
# 冲突型日期,看成国际标准格式,28/6/2016, 默认为False
pd.read_csv('filename', parse_dates=True, dayfirst=True) # 设置编码,数据解析后仅有一列返回Series
pd.read_csv('filename', encoding='utf-8', squeeze=True)
3.导出文件
#导出到CSV:
df.to_csv('SomeTable.csv', index=False)
df.to_csv('SomeTable.csv', index=False)
#导出到EXCEL:
df.to_excel('SomeTable.xls', index=False)
df.to_excel('SomeTable.xls', index=False)
#导出到TXT:
df.to_csv('SomeTable.txt', index=False)
df.to_csv('SomeTable.txt', index=False)
str转list可通过str.split(',')
list 转str可通过a = ','.join(['abc','def','ghi']) >>>'abc,def,ghi',值得注意的是list里面的数据必须是字符串类型才可以
DataFrame基本操作的更多相关文章
-
python做数据分析pandas库介绍之DataFrame基本操作
怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 这一部分主要学习pandas中基于前面两种数据结构的基本操作. 设有DataF ...
-
用python做数据分析pandas库介绍之DataFrame基本操作
怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 这一部分主要学习pandas中基于前面两种数据结构的基本操作. 设有DataF ...
-
pandas库介绍之DataFrame基本操作
怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 今天是5.1号. 这一部分主要学习pandas中基于前面两种数据结构的基本操作 ...
-
用python做数据分析4|pandas库介绍之DataFrame基本操作
原文地址 怎样删除list中空字符? 最简单的方法:new_list = [ x for x in li if x != '' ] 今天是5.1号. 这一部分主要学习pandas中基于前面两种数据结构 ...
-
机器学习三剑客之Pandas中DataFrame基本操作
Pandas 是基于Numpy 的一种工具,是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具.Pandas提供了大量能使我们快速便捷 ...
-
pd库dataframe基本操作
一.查看数据(查看对象的方法对于Series来说同样适用) 1.查看DataFrame前xx行或后xx行 a=DataFrame(data); a.head(6)表示显示前6行数据,若head()中不 ...
-
pyspark SparkSession及dataframe基本操作
from pyspark import SparkContext, SparkConf import os from pyspark.sql.session import SparkSession f ...
-
dataframe 基本操作
package com.jason.example import org.apache.spark.sql.functions.broadcast class DFTest extends Spark ...
-
python数据类型之pandas—DataFrame
DataFrame定义: DataFrame是pandas的两个主要数据结构之一,另一个是Series —一个表格型的数据结构 —含有一组有序的列 —大致可看成共享同一个index的Series集合 ...
随机推荐
-
zabbix命令:zabbix_get获取item数据
zabbix命令:zabbix_get获取item数据 http://www.ttlsa.com/zabbix/zabbix-zabbix_get-get-items/
-
hive报错 Another instance of Derby may have already booted the database
刚装好hive后,启动之后showtables;等正常,退出之后再进入,就发现会报错 Caused by: ERROR XSDB6: Another instance ofDerbymay have ...
-
插入排序之python实现源码
def insert_sort(old): for i in range(1, len(old)): for j in range(i, 0, -1): if(old[j] < old[j-1] ...
-
CI的面向切面的普通权限验证
第一步:开启CI的钩子配置,此次不多说看CI手册即可. 第二步:在cofig/hooks.php中进行钩子配置,CI手册中有记载 <?php defined('BASEPATH') OR exi ...
-
HDU H204 阿牛的EOF牛肉串
阿牛的EOF牛肉串 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
-
Codeforces 519E A and B and Lecture Rooms
http://codeforces.com/contest/519/problem/E 题意: 给出一棵树和m次询问,每次询问给出两个点,求出到这两个点距离相等的点的个数. 思路: lca...然后直 ...
-
[Cocos2d-x学习笔记]Android NDK: Host &#39;awk&#39; tool is outdated. Please define NDK_HOST_AWK to point to Gawk or Nawk解决方案
Android NDK: Host 'awk' tool is outdated. Please define NDK_HOST_AWK to point to Gawk or Nawkawk过期网上 ...
-
CF 958E2. Guard Duty (medium)
这道题是昨天linkfqy dalao上课讲的一道题 当时他讲的时候就想到了一种玄学的搞法,然后不敢相信自己切掉了 没想到后来CHJ dalao也想到了这种算法,然后发现是对的 后来10min就切掉了 ...
-
数据结构-队列(3)-使用Java内置队列
大多数流行语言都提供内置的队列库,因此您无需重新发明*. 如前所述,队列有两个重要的操作,入队 enqueue 和出队 dequeue. 此外,我们应该能够获得队列中的第一个元素,因为应该首先处理它 ...
-
CentOS依赖包查找工具(https://centos.pkgs.org)
https://centos.pkgs.org 通过这个地址,可以搜索出一些常用包放在哪些依赖或者仓库上.