Pandas 的三个基本数据结构:Series、DataFrame 和 Index

 

Pandas 的 Series 对象是一个带索引数据构成的一维数组。(numpy是隐式索引,series是显示索引)

Series (获取列元素)

import numpy as np

import pandas as pd

s1=pd.Series([1,2,3,4])

s1   输出       0    1       第一列为索引,第二列为数字

                            1    2

                            2    3

                            3    4

s1.values    输出 array([1, 2, 3, 4], dtype=int64)   获取值

s1.index     输出  RangeIndex(start=0, stop=4, step=1)   获取索引

 

s2=pd.Series({"1":1,"2":2})

s2.values

s2.index

 

s3=pd.Series([1,2,3],index=["A","B","C"])      #创建列数据,带索引

s2.values

s2.index

s2["A"]    根据索引取值

 

 

DataFrame  (获取所有数据)

import numpy as np

import pandas as pd

from pandas import Series,DataFrame

df=pd.read_excel()    #读取某文件

df                  #查看导入的表

df.columns           #查看索引

df_new=DataFrame(df,columns=['a,b'])      #取a列、b列数据

df_new['a']=pd.Series(10,index=[0]) #把a列,索引为0的数据设为10

df_new['a']=pd.Series(1)   #把a列,索引为0的数据设为10

df_new          #查看新数据

 

pd.DataFrame(np.random.rand(3, 2),columns=['foo', 'bar'],index=['a', 'b', 'c'])

 

 

DataFrame与Series整合实例     (多个Series列组成一个DataFrame)

data={"a":["w","s","x"],"b":["e","d","c"]}

az=pd.DataFrame(data)     #把data字典载入DataFrame中

az  输出 pandas使用方法         

az.index   输出  RangeIndex(start=0, stop=3, step=1)

az.values   输出 pandas使用方法

az=az.T    #矩阵转置

 

 

 

通过for循环获取每行元素

for i in az.iteritems():

    print(i)

 

 

 

q=pd.Series(data)

q  输出 pandas使用方法

q=pd.Series(data["a"])

q  输出 pandas使用方法

type(q)  输出 pandas.core.series.Series

 

 

文件操作

import numpy as np

import pandas as pd

from pandas import Series,DataFrame

文件读入

df=pd.read_csv('df.csv')

df=pd.read_json(a.json)

df=pd.read_excel('C:/variety_project/python_project/test02/ftp/test/dzb20180508.xlsx')

df=pd.DataFrame(df)

...

文件写出

df.to_csv('df.csv',index=False)         文件写出到df.csv,索引不写出

df.to_html('a.html')            输出到html

...

 

df.head()        返回前5行

df.tail()          返回后5行

df.iloc[2:5,:]      #返回第2到第5行,所有列数据

df.loc[2:4,:]       #返回索引为2到4行,所有列数据

 

 

reindex    重新赋值索引

1、Series reindex

例:

s1=Series([1,2,3],index=[1,5,10])

s2=s1.reindex(index=range(15))

s2 输出 pandas使用方法

s2=s1.reindex(index=range(15),method="ffill")    # method="ffill"表示,把所有NAN值,赋予上面的值

s2 输出 pandas使用方法

 

2、 dataFrame reindex

 df1=DataFrame(np.random.rand(4).reshape([2,2]),index=["a","b"],columns=["a1","b1"])

df1  输出 pandas使用方法

df1.reindex(index=["a","b","c"],columns=["a1","b1","c1"])  #重新赋值索引

df1  输出 pandas使用方法

 

df1.reindex(index=["a"])    可以通过reindex删除b列、c列数据

df1.drop("a",axis=0)       删除a行数据

df1.drop("a1",axis=1)      删除a1列数据                    

 

df1.isnull()      判断是否为nan

df1.notnull()

df1.dropna(axis=0,how="any")     删除含有nan的行

df1.dropna(axis=0,how="all")     删除所有元素为nan的行

df1.dropna(thresh=2)     删除含有2个nan元素的行

df1.fillna(values=1)          把所有nan填充成1

df1.fillna(values={0:0,1:1,2:2})   把0行的nan填充成0,1行的nan填充成1,......

df.fillna(method='ffill')            # 从前往后填充

df.fillna(method='bfill')           # 从后往前填充

df2=s1.unstack()         二级series转换成DataFrame

stack()  反转

df2=DataFrame([s1["1"],s1["2"]])     二级series转换成DataFrame

 

 

map添加数据

df1=DataFrame({"a":[1,2],"b":[3,4]})

g_map={1:5,2:6}

df1["c"]=df1["a"].map(g_map)

df1   输出  pandas使用方法

 

replace() 修改数据

df1.replace(1,9)   把索引1的数据修改成9

 

索引器:loc、iloc和ix

1、第一种索引器是 loc 属性,表示取值和切片都是显式的:

df. loc[1:3]

2、第二种是 iloc 属性,表示取值和切片都是 Python 形式的 隐式索引:

data.iloc[1:3]

 

 

A.add(B, fill_value=0)    Nan值补0

pandas使用方法

 

 

df=pd.DataFrame(np.random.rand(4, 2),index=[['a', 'a', 'b', 'b'], [1, 2, 1, 2]],columns=['data1', 'data2'])     创建多级索引

 

pd.concat() 合并数组

pd.merge()       数据连接

pd.join()      数据连接

 

GroupBy 中最重要的操作可能就是 aggregate、filter、transform和 apply(累计、过滤、转换、应用)了

 

dates = pd.to_datetime([datetime(2015, 7, 3), '4th of July, 2015','2015-Jul-6', '07-07-2015', '20150708'])    #设置时间格式

pd.date_range('2015-07-03', '2015-07-10')  生成区间日期

pd.date_range('2015-07-03', periods=8)

pd.period_range('2015-07', periods=8, freq='M')

 

 

DataFrame.eval()实现列间运算

df = pd.DataFrame([[1,2,3],[2,3,4]], columns=['A', 'B', 'C'])

result2 = pd.eval("(df.A + df.B) / (df.C)")

 

DataFrame.query()方法

result1 = df[(df.A < 0.5) & (df.B < 0.5)]

相关文章: