DataFrame基本操作

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)读取xls和csv

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[[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)<br>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=)&#x5F53;&#x5217;&#x540D;&#x4E0D;&#x76F8;&#x540C;&#x65F6;&#x540C;&#x6837;&#x53EF;&#x4EE5;&#x8FDB;&#x884C;&#x5408;&#x5E76;

删除重复的行

     df.drop_duplicates()      #&#x5220;&#x9664;&#x6240;&#x6709;&#x5217;&#x5B8C;&#x5168;&#x91CD;&#x5408;&#x7684;&#x884C;

     df.drop_duplicates(['key1','key2'])    #&#x5220;&#x9664;&#x5217;1&#x548C;&#x5217;2&#x91CD;&#x590D;&#x7684;&#x884C;

(6) 按行拼接

result = df1.append(df2)

(7)修改索引

df1.reindex(['a','b','c','d','e'],  inplace=Ture)<br>修改列的排列顺序<br>df1.reindex(columns=columns)
 x=x.reset_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

4.组合合并

(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=&#x2018;inner&#x2019;)

how&#x6709;inner&#x3001;outer&#x3001;left&#x548C;right&#x56DB;&#x4E2A;&#x9009;&#x9879;&#xFF0C;&#x5206;&#x522B;&#x8868;&#x793A;&#x5E76;&#x96C6;&#xFF0C;&#x4EA4;&#x96C6;&#xFF0C;&#x6309;&#x5DE6;&#x8FDE;&#x63A5;&#x548C;&#x6309;&#x53F3;&#x94FE;&#x63A5;&#xFF0C;&#x9ED8;&#x8BA4;&#x4E3A;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({"&#x8F7B;&#x5EA6;&#x6C61;&#x67D3;":1,"&#x4E2D;&#x5EA6;&#x6C61;&#x67D3;":2})

(2)替换

c = df['AreaId'].replace(-1, 0)
c = df['AreaId'].replace([-1,2,4,8], 0)

(3)更改列名字

df = df.rename(columns={'DeviceName_湿度_DataValue_Mean_Mean': '湿度'})

(4)排序

df.sort_index(inplace=True)
df=df.sort_index(by='timepoint')
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)

DataFrame基本操作
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

pd.read_table('filename', sep=',',nrows=10)

pd.read_table('filename', chunksize=1000)

pd.read_csv('filename', header=None)
pd.read_csv('filename', names=['a','b','c','d'])

pd.read_csv('filename', names=['a','b','c','d'], index_col='d')

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)

pd.read_csv('filename', na_values=['NULL'])

box = {'col1':['foo','NA'], 'col3':['two']}
pd.read_csv('filename', na_values=['NULL'])

pd.read_csv('filename', na_rep='NULL')

pd.read_csv('filename', parse_dates=True, dayfirst=True)

pd.read_csv('filename', encoding='utf-8', squeeze=True)

2.导出文件

导出到CSV:

df.to_csv('SomeTable.csv', index=False)
df.to_csv('SomeTable.csv', index=False)

df.to_excel('SomeTable.xls', index=False)
df.to_excel('SomeTable.xls', index=False)

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里面的数据必须是字符串类型才可以

Original: https://blog.csdn.net/qq_42695315/article/details/115818511
Author: 敌人派
Title: DataFrame基本操作

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/741444/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • 原始递归函数及模拟运行的优化

    看到网上一个题目,证明x开y次方是原始递归函数(primitive recursive function)。这个问题并不难,只要把x开y次方实现出来即可。于是,正好把《递归论》相关…

    Python 2023年10月20日
    044
  • Python numpy广播机制

    numpy广播机制 numpy 在算术运算期间采用”广播”来处理具有不同形状的 array ,即将较小的阵列在较大的阵列上”广播”,…

    Python 2023年8月23日
    044
  • Django分页器

    paginator类 paginator常用方法 paginator属性 Page类 Page常用方法 Page常用属性 Django 提供了一些类来帮助你管理分页数据 ——也就是…

    Python 2023年8月6日
    048
  • 大整数分解与两类特殊的素数及其猜测

    文章目录 一、大整数分解的三类途径与一个特殊例子 * 1.1 大整数分解 1.2 形如 1 0 n + n 10^n+n 1 0 n +n 的素数 1.3 特殊例子的数据分析 1….

    Python 2023年9月5日
    066
  • 【Python数据分析基础笔记(仅供本人学习记录)】P2.DataFrame对象及常用操作

    DataFrame的数据结构特点如下: 1.DataFrame由共用相同索引的一组列组成2.DataFrame是一个表格型数据结构,每列值类型可以不同3.DataFrame常用于表…

    Python 2023年8月8日
    036
  • Numpy.diff函数的原理

    记录Numpy.diff函数的个人理解 基本使用 * np.diff的参数 – axis=0 axis=1 axis=2 基本使用 np.diff()做了数组中元素的减…

    Python 2023年8月28日
    058
  • centos7 安装anaconda3,notebook,解决matplotlib 中文乱码

    阿里云centerOS 7 wget https://mirrors.tuna.tsinghua.edu.cn/anaconda/archive/Anaconda3-2019.03…

    Python 2023年9月2日
    033
  • pytest

    1.pytest 是python的一种 单元测试框架,同自带的 unittest 测试框架类似,但更简洁,效率更高。 特点: 易上手 支持单元测试和功能测试 支持参数化 执行测试过…

    Python 2023年9月14日
    032
  • GPT2-Chinese 部署实践,AI写小说2

    GPT2-Chinese 介绍 GPT-2 (Generative Pre-trained Transformer 2) 是由 OpenAI 开发的一种基于 Transformer…

    Python 2023年10月8日
    059
  • 机器学习代码笔记-2-简单线性回归

    Out[ ]: [<matplotlib.lines.line2d at 0x7fdfcee72f50>]</matplotlib.lines.line2d&gt…

    Python 2023年10月25日
    046
  • JDK动态代理深入剖析

    1 基于接口的代理模式 什么是代理? 简单来说,代理是指一个对象代替另一个对象去做某些事情。 例如,对于每个程序员来说,他都有编程的能力: interface Programmab…

    Python 2023年10月14日
    023
  • ORM的增删改查

    增:添加数据 使用模型类创建要添加的对象 [En] Use model classes to create objects to add 语法: 对象名 = 模型类(字段=值) 需…

    Python 2023年5月23日
    078
  • 如何在Python中安装NumPy

    公众号-IT赶路人,专注分享与IT相关的知识! NumPy是Python编程不可或缺的一个库。在本文中,我们将学习如何在Python中安装NumPy。以下要点将在本文中介绍,让我们…

    Python 2023年8月24日
    069
  • 切比雪夫(Chebyshev)不等式

    标准化 设随机变量x具有数学期望E ( x ) = μ E(x) = \mu E (x )=μ,方差D ( x ) = σ 2 D(x) = \sigma^{2}D (x )=σ2…

    Python 2023年10月26日
    035
  • Python:用Pandas输出格式化HTML并高亮

    输出格式化的HTML 我们已知一个DataFrame记录了模型Model1、Model2在3个Epoch优化中的精度变化情况: frame = pd.DataFrame({&quo…

    Python 2023年10月28日
    047
  • SolidWorks2022 安装教程

    软件介绍 SolidWorks是一款专业的三维3D设计软件,功能强悍,支持分布式数据管理,支持直接处理网格数据,提供更多的数据的灵活性,使用起来高效便捷。可以帮助用户轻松进行3D …

    Python 2023年11月5日
    0112
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球