创建DataFrame对象
语法:
pandas.DataFrame( data, index, columns, dtype, copy)
data 支持多种数据类型,如:ndarray,series,map,lists,dict,constant和另一个DataFrame。
index 行标签,如果没有传递索引值,默认值为0,1,2,3,4…….
columns 列标签,如果没有传递索引值,默认值为0,1,2,3,4…….
dtype 每列的数据类型
copy 是否复制数据,默认值为False
import pandas as pd
df = pd.DataFrame()
print (df)
利用单层list
import pandas as pd
x = [1,2,3,4,5,6]
df = pd.DataFrame(x,dtype=np.float32)
print(df)
利用双层list
import pandas as pd
x = [
["tom",10],
["jack",20],
["mike",30]
]
#df = pd.DataFrame(x,columns=['name','age'])
#如果是True,那么x数据不改变
df = pd.DataFrame(x,columns=['name','age','sex'],copy=True)
df['age'] = 100
print(df)
print(x)
利用数据是字典的列表创建
import pandas as pd
x = [
{'a':1,'b':2},
{'a':10,'b':20,'c':30}
]
#index 行索引 columns列索引
df1 = pd.DataFrame(x)
print(df1)
df1 = pd.DataFrame(x,index=["first","second"])
print(df1)
#如果没有c,就会默认是nun
df1 = pd.DataFrame(x,index=["first","second"],columns=['a','c'])
print(df1)
import pandas as pd
#利用字典创建DataFrame
#a、b是列索引,一定要设置行索引(index),否则报错
x = {'a':1,'b':2}
d1 = pd.DataFrame(x,index=['row1'])
print(d1)
'''
a b
row1 1 2'''
字典里面的v是列表类型创建DataFrame
#那么默认列索引是name和age
x = {
'name':['zs','ls','ww','zl'],
'age':[14,15,16,17]
}
d1 = pd.DataFrame(x)
print(d1)
'''
name age
0 zs 14
1 ls 15
2 ww 16
3 zl 17'''
print(d1['age'])
'''
0 14
1 15
2 16
3 17
Name: age, dtype: int64'''
import pandas as pd
s1=pd.Series(["馒头","包子","豆浆","老碗面"])
s2=pd.Series([1,1.5,2,10])
a={
"食品":s1,
"价格":s2
}
df1=pd.DataFrame(a)
print(df1)
'''
食品 价格
0 馒头 1.0
1 包子 1.5
2 豆浆 2.0
3 老碗面 10.0 '''
列的读取
、语法
df[columns_lable]查询单列
df[columns_lable]查询多列
查询一列会进行降维DataFrame——–>Series
查询多列不变
import pandas as pd
s1=pd.Series(["馒头","包子","豆浆","老碗面"])
s2=pd.Series([1,1.5,2,10])
a={
"食品":s1,
"价格":s2
}
df1=pd.DataFrame(a)
s=df1['食品']
print(s)
'''
0 馒头
1 包子
2 豆浆
3 老碗面
Name: 食品, dtype: object'''
print(type(s))# 查询一列会进行降维DataFrame-------->Series
s2=df1[['食品','价格']]
print(s2)
'''
食品 价格
0 馒头 1.0
1 包子 1.5
2 豆浆 2.0
3 老碗面 10.0'''
print(type(s2))# 查询多列不变
列的添加
语法:df[columns]=数据
切记是同类型数据
df1[columns]=df1[columns]+df1[columns]
import pandas as pd
s1=pd.Series(["馒头","包子","豆浆","老碗面"])
s2=pd.Series([1,1.5,2,10])
a={
"食品":s1,
"价格":s2
}
df1=pd.DataFrame(a)
print(df1)
print('======================')
'''
食品 价格
0 馒头 1.0
1 包子 1.5
2 豆浆 2.0 '''
#df[columns]=数据
a=['太干','不错',"太甜",'好吃']
df1['评价']=a
print(df1)
'''
食品 价格 评价
0 馒头 1.0 太干
1 包子 1.5 不错
2 豆浆 2.0 太甜
3 老碗面 10.0 好吃 '''
print('======================')
df1[columns]=df1[columns]+df1[columns]
df1['详细评价']=df1['食品']+df1['评价']
print(df1)
'''
食品 价格 评价 详细评价
0 馒头 1.0 太干 馒头太干
1 包子 1.5 不错 包子不错
2 豆浆 2.0 太甜 豆浆太甜
3 老碗面 10.0 好吃 老碗面好吃'''
列的删除
原数据
s1=pd.Series(["馒头","包子","豆浆","老碗面"])
s2=pd.Series([1,1.5,2,10])
a={
"食品":s1,
"价格":s2
}
df1=pd.DataFrame(a)
a=['太干','不错',"太甜",'好吃']
df1['评价']=a
df1['详细评价']=df1['食品']+df1['评价']
print(df1)
'''
食品 价格 评价 详细评价
0 馒头 1.0 太干 馒头太干
1 包子 1.5 不错 包子不错
2 豆浆 2.0 太甜 豆浆太甜
3 老碗面 10.0 好吃 老碗面好吃'''
删除语法
del df[columns] 根据下标进行检索删除,没有返回值
del df1['评价']
print(df1)
'''
食品 价格 详细评价
0 馒头 1.0 馒头太干
1 包子 1.5 包子不错
2 豆浆 2.0 豆浆太甜
3 老碗面 10.0 老碗面好吃'''
df.pop[columns] 根据下标进行检索删除,并返回删除的那一列
a=df1.pop("详细评价")
print(a)#要删除的数据
'''
0 馒头太干
1 包子不错
2 豆浆太甜
3 老碗面好吃
Name: 详细评价, dtype: object'''
print(df1)#删除完的数据
'''
食品 价格
0 馒头 1.0
1 包子 1.5
2 豆浆 2.0
3 老碗面 10.0'''
行的读取
原数据
s1=pd.Series(["馒头","包子","豆浆","老碗面","大盘鸡","木桶饭","麻辣烫"],index=["row1","row2","row3","row4","row5","row6","row7"])
s2=pd.Series([1,1.5,2,10,13,11,20],index=["row1","row2","row3","row4","row5","row6","row7"])
s3=pd.Series(["好吃","好吃","好吃","好吃","好吃","好吃","好吃",],index=["row1","row2","row3","row4","row5","row6","row7"])
a={
"食品":s1,
"价格":s2,
"评价":s3
}
df1=pd.DataFrame(a)
print(df1)
'''
食品 价格 评价
row1 馒头 1.0 好吃
row2 包子 1.5 好吃
row3 豆浆 2.0 好吃
row4 老碗面 10.0 好吃
row5 大盘鸡 13.0 好吃
row6 木桶饭 11.0 好吃
row7 麻辣烫 20.0 好吃'''
loc[index] 查询一行数据
print(df1.loc['row1'])# 必须用自己新设置的索引
'''
食品 馒头
价格 1.0
评价 好吃
Name: row1, dtype: object'''
loc[index,columns] 精确到行和列,那就是一个数据
print(df1.loc['row4','食品'])# 老碗面
loc[[index1,index2,….],[columns1,columns12,…..]] 获取多行多列
print(df1.loc[['row1','row3'],["食品","价格"]])
'''
食品 价格
row1 馒头 1.0
row3 豆浆 2.0'''
混合使用
print(df1.loc['row1',["食品","价格"]])#单行多列
'''
食品 馒头
价格 1.0
Name: row1, dtype: object'''
print(df1.loc[['row1','row3'],"食品"])#多行单列
'''
row1 馒头
row3 豆浆
Name: 食品, dtype: object'''
print(df1.loc["row1":"row3","食品":"价格"])#查询多行和多列(第几行到第几行,第几列到第几列)不是左开右闭
'''
食品 价格
row1 馒头 1.0
row2 包子 1.5
row3 豆浆 2.0'''
print(df1.loc[["row1","row3"],"食品":"价格"])#结合使用
'''
食品 价格
row1 馒头 1.0
row3 豆浆 2.0'''
#布尔索引
index_bool=[True,False,True,False,True,False,False]
col_bool=[True,False,True]
print(df1.loc[index_bool,col_bool])
'''
食品 评价
row1 馒头 好吃
row3 豆浆 好吃
row5 大盘鸡 好吃'''
a=df1['价格']>8
print(df1.loc[a])
'''
食品 价格 评价
row4 老碗面 10.0 好吃
row5 大盘鸡 13.0 好吃
row6 木桶饭 11.0 好吃
row7 麻辣烫 20.0 好吃'''
df.loc方法,根据行、列的标签值查询
df.iloc方法 根据行、列的数字位置查询
语法:
iloc[num_index] 根据索引位置获取行
iloc[num_index1:num_index2] 第几行到第几行,左开右闭
iloc[[num_index1,num_index2,…..]] 第几行和第几行
iloc[num_index,num_columns] #第几行的第几列
iloc[num_index,[num_columns1,num_columns2,….]] 第几行,第几列和第几列
iloc[num_index,[num_columns1:num_columns2]] 第几行,第几列到第几列,左开右闭
iloc[[num_index1,num_index2,…..],[num_columns1,num_columns2,….]]
iloc[num_index1:num_index2,[num_columns1:num_columns2]]
原数据
import pandas as pd
s1=pd.Series(["馒头","包子","豆浆","老碗面","大盘鸡","木桶饭","麻辣烫"],index=["row1","row2","row3","row4","row5","row6","row7"])
s2=pd.Series([1,1.5,2,10,13,11,20],index=["row1","row2","row3","row4","row5","row6","row7"])
s3=pd.Series(["好吃","好吃","好吃","好吃","好吃","好吃","好吃",],index=["row1","row2","row3","row4","row5","row6","row7"])
a={
"食品":s1,
"价格":s2,
"评价":s3
}
df1=pd.DataFrame(a)
print(df1)
'''
食品 价格 评价
row1 馒头 1.0 好吃
row2 包子 1.5 好吃
row3 豆浆 2.0 好吃
row4 老碗面 10.0 好吃
row5 大盘鸡 13.0 好吃
row6 木桶饭 11.0 好吃
row7 麻辣烫 20.0 好吃'''
print(df1.iloc[0:4])#第几行到第几行,左开右闭
'''
食品 价格 评价
row1 馒头 1.0 好吃
row2 包子 1.5 好吃
row3 豆浆 2.0 好吃
row4 老碗面 10.0 好吃 '''
print(df1.iloc[[0,3]])#第几行和第几行
'''
食品 价格 评价
row1 馒头 1.0 好吃
row4 老碗面 10.0 好吃'''
print(df1.iloc[6,0])#麻辣烫 第几行的第几列
print(df1.iloc[6,0:2])#第几行的,第几列到第几列
'''
食品 麻辣烫
价格 20.0
Name: row7, dtype: object'''
print(df1.iloc[6,[0,2]])#第几行的,第几列和第几列
'''
食品 麻辣烫
评价 好吃
Name: row7, dtype: object'''
print(df1.iloc[[0,2,4],[0,2]])#哪几行的哪几列
'''
食品 评价
row1 馒头 好吃
row3 豆浆 好吃
row5 大盘鸡 好吃'''
df[num_index1:num_index2] 第几行到第几行 左开右闭—切片
df[label_index1:label_index2] 第几行到第几行,左开右开
import pandas as pd
#原数据
s1=pd.Series(["馒头","包子","豆浆","老碗面","大盘鸡","木桶饭","麻辣烫"],index=["row1","row2","row3","row4","row5","row6","row7"])
s2=pd.Series([1,1.5,2,10,13,11,20],index=["row1","row2","row3","row4","row5","row6","row7"])
s3=pd.Series(["好吃","好吃","好吃","好吃","好吃","好吃","好吃",],index=["row1","row2","row3","row4","row5","row6","row7"])
a={
"食品":s1,
"价格":s2,
"评价":s3
}
df1=pd.DataFrame(a)
print(df1)
'''
食品 价格 评价
row1 馒头 1.0 好吃
row2 包子 1.5 好吃
row3 豆浆 2.0 好吃
row4 老碗面 10.0 好吃
row5 大盘鸡 13.0 好吃
row6 木桶饭 11.0 好吃
row7 麻辣烫 20.0 好吃'''
print(df1[0:4])#第一行到第五行,但是第五行不取
'''
食品 价格 评价
row1 馒头 1.0 好吃
row2 包子 1.5 好吃
row3 豆浆 2.0 好吃
row4 老碗面 10.0 好吃 '''
print(df1["row1":"row3"])#第一行到第三行,第三行也取
'''
食品 价格 评价
row1 馒头 1.0 好吃
row2 包子 1.5 好吃
row3 豆浆 2.0 好吃'''
行的添加
在末尾追加一行,返回一个新对象
df.append(other,ignore_index= False,verify_integrity = False,
sort = False)
other:要附加的数据,DataFrame或者Series等类型
ignore_index:如果是True,则不使用索引标签,默认false
verify_integrity:如果是True,在创建于重复项的索引时,引发valueError,默认时false
sort:如果原数据和添加数据的列没有对齐,则对列进行排序,不建议排序
x = [
["tom",10],
["jack",20],
["mike",30]
]
df = pd.DataFrame(x,columns=['name','age'],index=['row1','row2','row3'])
print(df)
print("-----------------------------------------")
y = [
["zs",10],
["ls",20],
["ww",30]
]
df1 = pd.DataFrame(y,columns=['name','age'],index=['row1','row2','row3'])
df2 = df.append(df1)
print(df2)
"""
name age
0 tom 10
1 jack 20
2 mike 30
3 zs 10
4 ls 20
5 ww 30
"""
print("------verify_integrity=True,在创建于重复项的索引时,引发valueError-------")
df1 = pd.DataFrame(y,columns=['name','age'],index=['row1','row2','row3'])
df2 = df.append(df1,verify_integrity=True)
print(df2)
行的删除
df1= df.drop(index) #删除某行,返回一个新数据
x = [
["tom",10],
["jack",20],
["mike",30]
]
df = pd.DataFrame(x,columns=['name','age'],index=['row1','row2','row3'])
print(df)
print("--------------------------")
df1= df.drop('row1')
print(df1)
Original: https://blog.csdn.net/weixin_62478198/article/details/121839818
Author: F濤
Title: DataFrame对象(创建,读取,添加,删除,方法)
原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/675962/
转载文章受原作者版权保护。转载请注明原作者出处!