链接:
头歌学习平台-pandas初体验
Series
导包
from pandas import Series,DataFrame
import pandas as pd
创建series,左边一列是索引,右边是值,int64是数据类型
obj=Series([4,7,-5,3])
obj
获取值和索引
obj.values
obj.index
指定值和索引创建series
obj2=Series([4,7,-5,3],index=['d','b','a','c'])
obj2
通过字典创建值和索引
sdata={'Ohio':35000,'Texas':71000,'Oregon':16000,'Utah':5000}
obj3=Series(sdata)
obj3
DataFrame
DataFrame是一个表格型的数据结构,是以一个或多个二维块存放的数据表格(层次化索引),DataFrame既有行索引还有列索引,它有一组有序的列,每列既可以是不同类型(数值、字符串、布尔型)的数据,或者可以看做由Series组成的字典。
创建DataFrame
import pandas as pd
from pandas import Series,DataFrame
dictionary = {'state':['0hio','0hio','0hio','Nevada','Nevada'],
'year':[2000,2001,2002,2001,2002],
'pop':[1.5,1.7,3.6,2.4,2.9]}
frame = DataFrame(dictionary)
修改行名:
frame=DataFrame(dictionary,index=['one','two','three','four','five'])
添加修改:
frame['add']=[0,0,0,0,0]
添加Series类型:
value = Series([1,3,1,4,6,8],index = [0,1,2,3,4,5])
frame['add1'] = value
读取csv格式数据
从csv文件里导入了数据,并储存在DataFrame中
import pandas as pd
# Reading a csv into Pandas.
# 如果数据集中有中文的话,最好在里面加上 encoding = 'gbk' ,以避免乱码问题。后面的导出数据的时候也一样。
df = pd.read_csv('test_public.csv', header=0)
查看前n行
# Getting first x rows.
df.head(5)
查看后n行
# Getting last x rows.
df.tail(5)
查看总行数
# Finding out how many rows dataset has.
len(df)
修改列名
# Changing column labels.
df.columns = ['water_year','rain_octsep','outflow_octsep','rain_decfeb', 'outflow_decfeb', 'rain_junaug', 'outflow_junaug']
数据的基本操作-排序
对索引进行排序
Series用sort_index()按索引排序,sort_values()按值排序;
DataFrame也是用sort_index()和sort_values()。
obj = Series(range(4), index=['d','a','b','c'])
obj.sort_index()
frame = DataFrame(np.arange(8).reshape((2,4)),index=['three', 'one'],columns=['d','a','b','c'])
frame
frame.sort_index()
按行排序
ascending 参数用于控制升序或降序,默认为升序。
默认按行索引排序(axis=0)
按列索引(axis=1)
frame.sort_index(axis=1, ascending=False)
按值排序
- Series:
obj = Series([4, 7, -3, 2])
obj.sort_values()
- DataFrame:
frame = DataFrame({'b':[4, 7, -3, 2], 'a':[0, 1, 0, 1]})
frame.sort_values(by='b') #DataFrame必须传一个by参数表示要排序的列
数据的基本操作-删除
删除Series的一个元素:
ser = Series([4.5,7.2,-5.3,3.6], index=['d','b','a','c'])
ser.drop('c')
删除DataFrame的行或列:
df = DataFrame(np.arange(9).reshape(3,3), index=['a','c','d'], columns=['oh','te','ca'])
df
df.drop('a')
df.drop(['oh','te'],axis=1)
drop()返回的是一个新对象,原对象不会被改变。
数据的基本操作-算数运算
算术运算(+,-,*,/)
DataFrame中的算术运算是df中对应位置的元素的算术运算,如果没有共同的元素,则用NaN代替。
df1 = DataFrame(np.arange(12.).reshape((3,4)),columns=list('abcd'))
df2 = DataFrame(np.arange(20.).reshape((4,5)),columns=list('abcde'))
df1
df2
df1+df2
想设置默认的其他填充值,而非NaN的话,可以传入填充值。
df1.add(df2, fill_value=0)
数据的基本操作-去重
表示各行是否是重复行
df.duplicated()
drop_duplicates()用于去除重复的行数
df.drop_duplicates()
层次化索引
能在一个轴上拥有多个(两个以上)索引级别
data = Series(np.random.randn(10), index = [['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd', 'd' ],[1,2,3,1,2,3,1,2,2,3]])
data
索引方式
data['b':'d']
内层选取
冒号表示abcd索引,2表示123索引中的2
data[:, 2]
选取索引为’a’,2的值
数据重塑
将Series转化成DataFrame:
data.unstack()
转换成时间类型数据
Timestamp时间戳类型
to_datetime
order["lock_time"]=pd.to_datetime(order["locktime"])