pandas学习(快速入门)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/sunshunli/article/details/80040958
数据结构Series
#Series 是一个一维数组结构,可以存入任一一种python的数据类型(integers, strings, floating point numbers, Python objects, etc.)。
from pandas import Series
print("用列表生成Series")
obj=Series([4,7,-5,3])
print(obj)#你会发现生成的像字典一样的形式。
print(obj.values)
print(obj.index)
print(".........................")
#指定Series的index
obj2=Series([4,-7,5,3])
obj2.index=['d','c','b','a']
print(obj2)
print(obj2.index)
print(obj2['a'])
obj2['d']=2
print(obj2[2:])
print("///////////")
print(obj2[obj2 >0])#找出大于0 的元素
print("///////////")
print('b' in obj2)
print('e' in obj2)#判断索引是否存在

from pandas import Series
print("用字典生成Series")
sdata = {'Ohio':45000, 'Texas':71000, 'Oregon':16000, 'Utah':5000}
obj3 = Series(sdata)
print(obj3)
print()

print('使用字典生成Series,并额外指定index,不匹配部分为NaN。')
states = ['California', 'Ohio', 'Oregon', 'Texas']
obj4 = Series(sdata, index = states)
print(obj4)
print()

print('Series相加,相同索引部分相加。')
print(obj3 + obj4)
print()

print('指定Series及其索引的名字')
obj4.name = 'population'
obj4.index.name = 'state'
print(obj4)
print()
print('替换index')
obj.index = ['Bob', 'Steve', 'Jeff', 'Ryan']
print(obj)



数据结构DateFrame

import numpy as np
from pandas import Series, DataFrame

print('用字典生成DataFrame,key为列的名字。')
data = {'state':['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
        'year':[2000, 2001, 2002, 2001, 2002],
        'pop':[1.5, 1.7, 3.6, 2.4, 2.9]}
print(DataFrame(data))
print(DataFrame(data, columns = ['year', 'state', 'pop'])) # 指定列顺序
print()

print('指定索引,在列中指定不存在的列,默认数据用NaN。')
frame2 = DataFrame(data,
                    columns = ['year', 'state', 'pop', 'debt'],
                    index = ['one', 'two', 'three', 'four', 'five'])
print(frame2)
print("//////////////////////")
print(frame2.state)
print("、、、、、、、、、、、、")
print(frame2.year)
print(".......................")
print(frame2.ix['three'])
print("!!!!!!!!!!!!!!!!!!!!!!!")
frame2['debt'] = 16.5 # 修改一整列
print(frame2)
frame2.debt = np.arange(5)  # 用numpy数组修改元素
print(frame2)
print()

print('用Series指定要修改的索引及其对应的值,没有指定的默认数据用NaN。')
val = Series([-1.2, -1.5, -1.7], index = ['two', 'four', 'five'])
frame2['debt'] = val
print(frame2)
print()

print('赋值给新列')
frame2['eastern'] = (frame2.state == 'Ohio')  # 如果state等于Ohio为True
print(frame2)
print(frame2.columns)
print()

print('DataFrame转置')
pop = {'Nevada':{2001:2.4, 2002:2.9},
        'Ohio':{2000:1.5, 2001:1.7, 2002:3.6}}
frame3 = DataFrame(pop)
print(frame3)
print(frame3.T)
print()

print('指定索引顺序,以及使用切片初始化数据。')
print(DataFrame(pop, index = [2001, 2002, 2003]))
pdata = {'Ohio':frame3['Ohio'][:-1], 'Nevada':frame3['Nevada'][:2]}
print(DataFrame(pdata))
print()

print('指定索引和列的名称')
frame3.index.name = 'year'
frame3.columns.name = 'state'
print(frame3)
print(frame3.values)
print(frame2.values

索引对象

import numpy as np
import sys
from pandas import Series, DataFrame, Index

print('获取index')
obj = Series(range(3), index = ['a', 'b', 'c'])
index = obj.index
print(index[1:])
try:
    index[1] = 'd'  # index对象read only
except:
    print(sys.exc_info()[0])
print()

print('使用Index对象')
index = Index(np.arange(3))#通过下面的两个输出可以知道Idenx函数的作用是把数组变成列表。
print(np.arange(3))
print(index)
obj2 = Series([1.5, -2.5, 0], index = index)
print(obj2)
print(obj2.index is index)
print()

print('判断列和索引是否存在')
pop = {'Nevada':{20001:2.4, 2002:2.9},
        'Ohio':{2000:1.5, 2001:1.7, 2002:3.6}}
frame3 = DataFrame(pop)
print('Ohio' in frame3.columns)
print('2003' in frame3.index)

重新索引

import numpy as np
from pandas import DataFrame, Series

print('重新指定索引及顺序')
obj = Series([4.5, 7.2, -5.3, 3.6], index = ['d', 'b', 'a', 'c'])
print(obj)
obj2 = obj.reindex(['a', 'b', 'd', 'c', 'e'])
print(obj2)
print(obj.reindex(['a', 'b', 'd', 'c', 'e'], fill_value = 0))  # 指定不存在元素的默认值
print()

print('重新指定索引并指定填元素充方法')
obj3 = Series(['blue', 'purple', 'yellow'], index = [0, 2, 4])
print(obj3)
print(obj3.reindex(range(6), method = 'ffill'))#一种填充方式
print()

print('对DataFrame重新指定索引')
frame = DataFrame(np.arange(9).reshape(3, 3),
                  index = ['a', 'c', 'd'],
                  columns = ['Ohio', 'Texas', 'California'])
print(frame)
frame2 = frame.reindex(['a', 'b', 'c', 'd'])
print(frame2)
print()

print('重新指定column')
states = ['Texas', 'Utah', 'California']
print(frame.reindex(columns = states))
print()

 删除指定轴上的项

import numpy as np
from pandas import Series, DataFrame

print('Series根据索引删除元素')
obj = Series(np.arange(5.), index = ['a', 'b', 'c', 'd', 'e'])
new_obj = obj.drop('c')#以索引来进行删除元素。
print(new_obj)
print(obj.drop(['d', 'c']))#删除两项的话,以列表的形式来写。
print()

print('DataFrame删除元素,可指定索引或列。')
data = DataFrame(np.arange(16).reshape((4, 4)),
                  index = ['Ohio', 'Colorado', 'Utah', 'New York'],
                  columns = ['one', 'two', 'three', 'four'])
print(data)
print(data.drop(['Colorado', 'Ohio']))
print(data.drop('two', axis = 1))
print(data.drop(['two', 'four'], axis = 1))

索引 选取 和过滤

import numpy as np
from pandas import Series, DataFrame

print('Series的索引,默认数字索引可以工作。')
obj = Series(np.arange(4.), index = ['a', 'b', 'c', 'd'])
print(obj)
print(obj['b'])
print(obj[3])#索引顺序有两种方法,一种是通过index的值,另一种是通过下表的值,下标从零开始。
print(obj[[1,3]])#输出下标为1和3 的元素值。
print(obj[obj < 2])
print()

print('Series的数组切片')
print(obj['b':'c'])  # 闭区间
print(obj[1:3])#这两种方法都可以。
obj['b':'c'] = 5#更改值
print(obj)
print()

print('DataFrame的索引')
data = DataFrame(np.arange(16).reshape((4, 4)),
                  index = ['Ohio', 'Colorado', 'Utah', 'New York'],
                  columns = ['one', 'two', 'three', 'four'])
print(data)
print(data['two']) # 打印列
print(data[['three', 'one']])
print(data[:2])#如果用数组下标的话,那么表示的是按照行来索引的。
print(data.ix['Colorado', ['two', 'three']]) # 指定索引和列
print(data.ix[['Colorado', 'Utah'], [3, 0, 1]])
print(data.ix[2])  # 打印第2行(从0开始)
print(data.ix[:'Utah', 'two']) # 从开始到Utah,第2列。
print()

print('根据条件选择')
print(data[data.three > 5])
print(data < 5)  # 打印True或者False
data[data < 5] = 0
print(data)

算术运算和数据对齐

import numpy as np
from pandas import Series, DataFrame

print('加法')
s1 = Series([7.3, -2.5, 3.4, 1.5], index = ['a', 'c', 'd', 'e'])
s2 = Series([-2.1, 3.6, -1.5, 4, 3.1], index = ['a', 'c', 'e', 'f', 'g'])
print(s1)
print(s2)
print(s1 + s2)#如果两个index索引相同则相加,不同就是NAN
print()

print('DataFrame加法,索引和列都必须匹配。')
df1 = DataFrame(np.arange(9.).reshape((3, 3)),
                columns = list('bcd'),
                index = ['Ohio', 'Texas', 'Colorado'])
df2 = DataFrame(np.arange(12).reshape((4, 3)),
                columns = list('bde'),
                index = ['Utah', 'Ohio', 'Texas', 'Oregon'])
print(df1)
print(df2)
print(df1 + df2)
print()

print('数据填充')
df1 = DataFrame(np.arange(12.).reshape((3, 4)), columns = list('abcd'))
df2 = DataFrame(np.arange(20.).reshape((4, 5)), columns = list('abcde'))
print(df1)
print(df2)
print(df1.add(df2, fill_value = 1))#就相当于DateFrame的加法,只不过是没有的地方填充fill_value的值。
print(df1.reindex(columns = df2.columns, fill_value = 0))#原来的索引不变,在加上重新新的索引。
print()

print('DataFrame与Series之间的操作')
arr = np.arange(12.).reshape((3, 4))
print(arr)
print(arr[0])
print(arr[0][0])
print(arr - arr[0])
frame = DataFrame(np.arange(12).reshape((4, 3)),
                  columns = list('bde'),
                  index = ['Utah', 'Ohio', 'Texas', 'Oregon'])
series = frame.ix[0]
print(frame)
print(series)
print("////////////")
print(frame - series)
series2 = Series(range(3), index = list('bef'))
print(frame + series2)
series3 = frame['d']
print(frame.sub(series3, axis = 0))  # 按列减

函数应用和映射

import numpy as np
from pandas import Series, DataFrame

print('函数')
frame = DataFrame(np.random.randn(4, 3),#np.random.rand这个可以产生那个数但不产生负数。
                  columns = list('bde'),
                  index = ['Utah', 'Ohio', 'Texas', 'Oregon'])
print(frame)
print(np.abs(frame))#求绝对值。
print()

print('lambda以及应用')
f = lambda x: x.max() - x.min()
print(frame.apply(f))#默认对每一列进行使用
print(frame.apply(f, axis = 1))#若果对每一行进行使用需要加上参数。

排序

import numpy as np
from pandas import Series, DataFrame

print('根据索引排序,对于DataFrame可以指定轴。')
obj = Series(range(4), index = ['d', 'a', 'b', 'c'])
print(obj)
print(obj.sort_index())
frame = DataFrame(np.arange(8).reshape((2, 4)),
                  index = ['three', 'one'],
                  columns = list('dabc'))
print(frame.sort_index())
print(frame.sort_index(axis = 1))#按照行进行排序。
print(frame.sort_index(axis = 1, ascending = False)) # 降序
print()

print('根据值排序')
obj = Series([4, 7, -3, 2])
print(obj.sort_values()) # order已淘汰
print()

print('DataFrame指定列排序')
frame = DataFrame({'b':[4, 7, -3, 2], 'a':[0, 1, 0, 1]})
print(frame)
print(frame.sort_values(by = 'b')) # sort_index(by = ...)已淘汰
print(frame.sort_values(by = ['a', 'b']))
print()

print('rank,求排名的平均位置(从1开始)')
obj = Series([7, -5, 7, 4, 2, 0, 4])
# 对应排名:-5(1), 0(2), 2(3), 4(4), 4(5), 7(6), 7(7)
print(obj.rank())
print(obj.rank(method = 'first'))  # 取第一次出现,不求平均值。
print(obj.rank(ascending = False, method = 'max')) # 逆序,并取最大值。所以-5的rank是7.
frame = DataFrame({'b':[4.3, 7, -3, 2],
                  'a':[0, 1, 0, 1],
                  'c':[-2, 5, 8, -2.5]})
print(frame)
print(frame.rank(axis = 1)) #按行排序
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

data=pd.date_range('20160101',periods=6)
# print(data)
# df=pd.DataFrame(np.random.randn(6,4),index=data,columns=['a','b','c','d'])
# print (df)
# #根据值进行排序通过by来指定根据哪一个值排序
# df=pd.DataFrame({'name':['sunshunli','sunguozhu','sundejiang','wangli'],
#                  'age':[22,21,46,45]},index=['one','two','three','four'])
# print(df)
# # print(df.describe())
# # print(df.T)
# print("###########")
# print(df.sort_index(axis=1,ascending=False))#axis如果是1的话,那么是行索引进行排序
# # print("##############")
# print(df.sort_index(axis=0,ascending=False))#axis如果是0 那么是对列索引进行排序
# print(df.sort_values(by='age'))
#数据筛选
# df=pd.DataFrame(np.arange(24).reshape(6,4),index=data,columns=['A','B','C','D'])
# print(df)
# print(df['A'])
# print(df[0:3])
# print(df['20160102':'20160105'])
# print(df.loc['20160102'])
# print(df.loc['20160102',['A','B']])
# print(df.loc[:,['A','B']])
# print(df.iloc[3])
# print(df.iloc[3,2])#相当于坐标
# print(df.iloc[3:5,1:3])#切片
# print(df.iloc[[1,3,5],2:4])#不连续的
# print(df.ix[3,['A','C']])#混合
# print(df[df.A > 8])
# df=pd.DataFrame(np.arange(24).reshape(6,4),index=data,columns=['A','B','C','D'])
# print(df)
# df.iloc[2,2]=100
# print(df)
# df.loc['20160102','A']=200
# print(df)
# df.ix[3,'B']=300
# print(df)
# df[df.D > 7]=600
# print(df)
# df.A[df.D > 2]=600
# print(df)
# df['F']=np.nan
# df['F']=df['B']+df['C']
# print(df)

# df.ix[0,'B']=np.nan
# df.ix[1,'C']=np.nan
# print(df.dropna(axis=0,how='any'))#如果是any 的话,只要有一个NaN那么就会丢掉这个数据
# print("###########")
# print(df.dropna(axis=0,how='all'))#如果是all 的话,只有全部是NaN那么就会丢掉这个数据
# print("##########")
# print(df.dropna(axis=1,how="any"))
# print("############")
# print(df.dropna(axis=1,how='all'))
# print(df.fillna(0))#把为NaN的值填充值
# print(df.isnull())
# print(np.any(df.isnull()==True))#判断数据中是否有空值
#pamdas数据导入导出
# col_names = ["ID", "K1K2驱动信号", "电子锁驱动信号", "急停信号", "门禁信号", "THDV-M", "THDI-M", "label"]
# data=pd.read_csv('data_test.csv',names=col_names)
# print(data)
# #存储
# data.to_csv('channge')
#pandas合并
#concatenating  这种连接只能是整个表进行连接,不能按照某一列
# df1=pd.DataFrame(np.ones([3,4])*0,columns=['a','b','c','d'])
# df2=pd.DataFrame(np.ones([3,4])*1,columns=['a','b','c','d'])
# df3=pd.DataFrame(np.ones([3,4])*2,columns=['a','b','c','d'])
# print(df1)
# print(df2)
# # print(df3)
# res = pd.concat([df1,df2,df3],axis=0,ignore_index=True)#列的方向合并
# print(res)
# res1 = pd.concat([df1,df2,df3],axis=1,ignore_index=True)
# print(res1)
#join  ['inner','outer']
# df1=pd.DataFrame(np.ones([3,4])*0,columns=['a','b','c','d'],index=[1,2,3])
# df2=pd.DataFrame(np.ones([3,4])*1,columns=['b','c','d','e'],index=[2,3,4])
# print(df1)
# print(df2)
# res = pd.concat([df1,df2],axis=0)
# print(res)
# res = pd.concat([df1,df2],join='outer')#合并是把所有的列都合并,没有的用NaN来填充
# print(res)
# res = pd.concat([df1,df2],join='inner')#合并是只合并这两个数据共有的部分
# print(res)
#join_axes
# res = pd.concat([df1,df2],axis=1)
# print(res)
# res1 = pd.concat([df1,df2],axis=1,join_axes=[df1.index])#join_axes作用是用哪一个数据的index来进行合并
# print(res1)
#append 添加

# df1=pd.DataFrame(np.ones([3,4])*0,columns=['a','b','c','d'],index=[1,2,3])
# df2=pd.DataFrame(np.ones([3,4])*1,columns=['a','b','c','d'],index=[1,2,3])
# df3=pd.DataFrame(np.ones([3,4])*2,columns=['a','b','c','d'],index=[1,2,3])

# res = df1.append(df2)
# print(res)
# res = df1.append([df2,df3],ignore_index=True)
# print(res)


# df1=pd.DataFrame(np.ones([3,4])*0,columns=['a','b','c','d'],index=[1,2,3])
# s1=pd.Series([1,2,3,4],index=['a','b','c','d'])
# res = df1.append(s1,ignore_index=True)#必须要加上ignore_index
# print(res)


#merging  方法合并DateFram
# left = pd.DataFrame({'key':['k0','k1','k2','k3'],
#                      'A':['A0','A1','A2','A3'],
#                      'B':['B0','B1','B2','B3']})
# right = pd.DataFrame({'key':['k0','k1','k2','k3'],
#                      'C':['C0','C1','C2','C3'],
#                      'D':['D0','D1','D2','D3']})

# res = pd.merge(left,right,on='key')#基于某几列形同的列进行合并
# print(res)
#数据可视化
#plot data
# data = pd.Series(np.random.randn(1000),index=np.arange(1000))
# data = data.cumsum()
# data.plot()
# plt.show()
import pandas as pd
import numpy as np
# dates = pd.date_range('20130101', periods=6)
# print(dates)
# DatetimeIndex=['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',
#                '2013-01-05', '2013-01-06'],
# df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
# print(df)
# print(df.describe())#函数的作用是你描述数据,显示数据的一些信息
#对缺少数据的处理
data = {'state':['Ohio', 'Ohio', 'Ohio', 'Nevada', 'Nevada'],
        'year':[2000, 2001,np.NaN, 2001, 2002],
        'pop':[1.5, 1.7, 3.6, np.NAN, 2.9]}
a=pd.DataFrame(data)
print(pd.DataFrame(data))
#删除缺少数据的行
res1=a.dropna(how='any')
print(res1)
#填充缺少数据的行
res2=a.fillna(0.0)
print(res2)


 

猜你喜欢

转载自blog.csdn.net/sunshunli/article/details/80040958