Series一维数据,由索引和列组成
pandas.Series(data,index,dtype,name,copy)
参数说明:
data:一组数据(ndarray 类型)。
index:数据索引标签,如果不指定,默认从 0 开始。
dtype:数据类型,默认会自己判断。
name:设置名称。
copy:拷贝数据,默认为 False。
一维数据基本用法
import pandas as pd
a=[1,2,3]
data=pd.Series(a)
#重新定义索引,
data=pd.Series(a,index=['x','y','z'])
#给这个一维数据起名字
data=pd.Series(a,name='series_way')
DATaFrame二维表格
表格形的二维数据结构,含有一组有序的列,每列可以是不同的值类型(数值,字符串,布尔值等)。他既有行索引也有列索引,可以看作由series组成的字典。且组成的方式可以用字典包列表,列表包字典都可以。
DataFrame构造方法
pandas.DataFrame(data,index,cloumns,dtyp,copy)
参数说明
- data:一组数据(字典,列表,series等类型)
- index: 索引值,也可以称为行标签
- columns:列标签,默认(0,1,2…n)
- dtype:数据类型,默认
- copy: 拷贝数据,默认为False
列表套列表创建
import pandas as pd
data=[['list1',10],['list2',12],['list3',13]]
dframe=pd.DataFrame(data,columns=['Name','Age'],dtype=float)
print(df)
字典套列表创建(即ndarrays,他们的长度必须相同)
import pandas as pd
#key即列名,value用列表代替,每个value的列表长度一样
data={'Name':['list1','list2','list3'],'Age':['11','12','13']}
df=pd.DataFrame(data)
print(df)
列表套字典创建
这个方法不建议采用,太冗余繁琐,列数据太多就很麻烦
import pandas as pd
data=[{'Name':'list1','Age':'11'},{'Name':'list2','Age':'12','Sex':'男'}]
#这其中没有对应的数据则为None
df=pd.DataFrame(data)
print(df)
loc[]函数:获取指定的行数据
#没有设置指定索引
import pandas as pd
data=[{'Name':'list1','Age':'11'},{'Name':'list2','Age':'12','Sex':'男'}]
#这其中没有对应的数据则为None
df=pd.DataFrame(data)
print(loc[0])
print(loc[1])
#上述依次返回指定的第一行,第二行内容
print(loc[[0,1]])
#同理
#设置指定索引
df=pd.DataFrame(data,index=['x','y'])
print(loc['x'])
DataFrame相关函数
ignore_index,忽略index索引不显示(仅用于append方法中)
data=[{'01':'你好'},{'02':'bu'}]
df=pd.DataFrame(data)
df=df.append({'03':'1'},ignore_inde=True)
print(df)
append可添加新列的新的一行也可以添加旧列的新的一行
结果
不加的结果
reset_index()设置新的索引,不用旧索引
data=[{'01':'你好'},{'02':'bu'}]
df=pd.DataFrame(data)
#添加drop参数为True
df=df.reset_index(drop=True)
print(df)
操作CSV文件
import pandas as pd
#读取csv文件为DataFrame表格
df=pd.read_csv('nba.csv')
#to_string()用于返回DataFrame类型的数据,如果不使用该函数,则输出结果为数据的前五行和末尾五行,中间以...代替
print(df.to_string())
to_csv存储为csv文件
import pandas as pd
#key即列名,value用列表代替,每个value的列表长度一样
data={'Name':['list1','list2','list3'],'Age':['11','12','13']}
df=pd.DataFrame(data)
#存储为csv文件
df.to_csv('reboot.csv')
head,tail读取文件前面,末尾内容。info()
df.head(n),n是行数,tail同理
df.info(),返回dataframe基本信息
设置表格宽度方法
#设置表格宽度
pd.set_option('display.width', 500)
results.append()
data={'Name':['list1','list2','list3'],'Age':['11','12','13']}
df=pd.DataFrame(data)
results.append(df,ignore_index=True)
#ignore_index=True避免索引重复,默认为False。
reset_index()
在这里插入代码片
Pandas Json
Json是javascribts对象表示法。类似XML,比XML更小更快,更容易解析,
pandas可以更好的处理json数据
简单读取文件方法
df=pd.read_json(文件名,encoding='gbk')
#不加转码可能报错,反正我报错了。
print(df.to_string())
#to_string()用于处理dataframe这样的数据,也可以直接打印不使用此方法
直接data变量存储json格式数据
df=pd.DataFrame(data)
同理使用字典作为类json数据,来存储也可以。上面series有提到,相比dataframe就是多加一列即可
data={
"cloi1":{"row1":1,"row2":2,"row":3},
"cloi2":{"row1":1,"row2":2,"row":3}
}
df=pd.DataFrame(data)
print(df)
从url来读取json文件
url= 'https://static.runoob.com/download/sites.json'
df=pd.read_json(url)
print(df)
读取嵌套的json内容,使用dataframe格式展现
“‘
test_add.json文件内容
"school_name": "ABC primary school",
"class": "Year 1",
"students": []
”’
#test_add.json是一个内嵌的json文本,
#首先读取json数据,不使用dataframe形式,使用json文本需要json模块
with open('test_add.json','r') as f :
data=json.loads(f.read())
# print(data)
#展现内嵌的数据使用json_normalize模块,record_path指向的是内嵌字典的值对应的k
df=pd.json_normalize(data,record_path=['students'])
print(df)
展现元数据即school_name和class的内容,需要用到meta参数
df=pd.json_normalize(data,record_payj=['students'],meta=['school_name','class'])
#即会对students的列加上两列school_name和class,其内容每行都是相同的。
假如元数据是一个字典里嵌套字典的数据。
#例如school_name={
"address":{"city":{"celphone":"13249898"},"area":"江夏"},
"name":{"xing":"li"}
}
#取celphone,xing的值为列名和内容,
meta=[['school_name','address','city','celphone'],['school_name','name','xing']]
结果
使用glom模块来便捷处理json中字典嵌套的内容
glom模块可以使用.来访问内嵌对象的属性
jsonfile={
"school_name": "local primary school",
"class": "Year 1",
"students": [
{
"id": "A001",
"name": "Tom",
"grade": {
"math": 60,
"physics": 66,
"chemistry": 61
}
},
{
"id": "A002",
"name": "James",
"grade": {
"math": 89,
"physics": 76,
"chemistry": 51
}
},
{
"id": "A003",
"name": "Jenny",
"grade": {
"math": 79,
"physics": 90,
"chemistry": 78
}
}]
}
df=pd.DataFrame(jsonfile)
data_math=df['students'].apply(lambda row: glom(row,'grade.math'))
print(data_math)
继续更新。。。。。。。。。。。。