两种数据类型的比较
参考:https://blog.csdn.net/LZH_12345/article/details/79798787
总结:两种数据的横向属性是index,而只有DataFrame的columns属性指的是纵向属性
Series的数据只是有index和index.name属性,没有columns属性,而DataFrame数据有columns属性
其中,series的数据更像是字典的数据,包含索引和数据;而另一种形式的数据则可以使用多个属性
通过下面程序的显示,比较两种数据的不同
import pandas as pd
def fenge(x):
print("*******%s的分割符*******"%x)
data={'names':['Bob','Jane','Jack','Ann'],
'sex':['M','F','M','F'],
'age':[21,30,26,28]}
se = pd.Series(data)
#其中“names”,"sex"..是se的index值,可通过se.index=[]改变
af_se = pd.DataFrame(data)
fenge("Series类型的数据")
print(se)
'''
names [Bob, Jane, Jack, Ann]
sex [M, F, M, F]
age [21, 30, 26, 28]
dtype: object
'''
fenge("DataFrame类型的数据")
print(af_se)
'''
names sex age
0 Bob M 21
1 Jane F 30
2 Jack M 26
3 Ann F 28
'''
#下一条命令,不能直接改变原有的af_se的columns数据,只能通过赋值到另一变量
af_se2=pd.DataFrame(af_se,index=[0,"b","2","4"]\
,columns=["names","se","tr","fo"])
fenge("对DataFrame的数据的索引和列名称修改")
print(af_se2)
'''
names se tr fo
0 Bob NaN NaN NaN
b NaN NaN NaN NaN
2 NaN NaN NaN NaN
4 NaN NaN NaN NaN
'''
Series类型的数据
个人理解:就像是一维字典和列表的结合,默认index是和列表一样从0开始,但不同的是该数据类型的索引可以自己定义 ,例如,a.index=[索引1,索引2…]
对series的数据可以使用:变量名.index和变量名.values显示数据内容
import pandas as pd
def fenge(x):
print("*******%s的分割符*******"%x)
a=[1,2,6,8,4]
fenge("列表a")
print(a)
#[1, 2, 6, 8, 4]
b=pd.Series(a)
fenge("series")
print (b)
'''
0 1
1 2
2 6
3 8
4 4
dtype: int64
'''
b.index=["zero","first","second","third","forth"]
fenge("修改index后")
print(b)
"""
zero 1
first 2
second 6
third 8
forth 4
dtype: int64
"""
fenge("打印b的values")
print(b.values)
#[1 2 6 8 4]
print(b.keys)
'''
<bound method Series.keys of zero 1
first 2
second 6
third 8
forth 4
dtype: int64>
'''
为series对象本身和index添加name
import pandas as pd
def fenge(x):
print("*******%s的分割符*******"%x)
a=[1,2,'6',8,4]
b=pd.Series(a)
fenge("series")
print(b)
'''
0 1
1 2
2 6
3 8
4 4
dtype: object
'''
fenge("添加索引名字后")
b.name="mingzi"
b.index.name="suoyin"
print (b)
'''
suoyin
0 1
1 2
2 6
3 8
4 4
Name: mingzi, dtype: object
'''
DataFrame的数据类型
个人认识:相当于是相对与Series的多维,不只是一行的索引,可以有多个属性的索引,可从下面程序看出。但主义的是reindex(数据,index=[ ])函数不改变原来数据的内容,只是将参数的数据拷贝入函数后改变形式。注意的是若reindex()的index[]参数中出现没有在参数数据中,则新生成的数据内容默认为空。
使用的数据 | ||
---|---|---|
2013/10/24 | 3 | 0 |
2013/10/25 | 4 | 1 |
2013/10/26 | 5 | 2 |
2013/10/27 | 5 | 3 |
2013/10/28 | 5 | 4 |
2013/10/29 | 5 | 5 |
import pandas as pd
def fenge(x):
print("*******%s的分割符*******"%x)
df=pd.read_csv("test_data.csv",header=None)
fenge("原始的df数据的前两项")
print(df.head(4))
'''
0 1 2
0 2013/10/24 3 0
1 2013/10/25 4 1
2 2013/10/26 5 2
3 2013/10/27 5 3
'''
df.columns=["A","B","C"]
fenge("添加列属性后")
print(df.head(4))
'''
A B C
0 2013/10/24 3 0
1 2013/10/25 4 1
2 2013/10/26 5 2
3 2013/10/27 5 3
'''
fenge("添加index的值")
df.index=["a","b","c","d","e","f"]
print(df.head(4))
'''
A B C
a 2013/10/24 3 0
b 2013/10/25 4 1
c 2013/10/26 5 2
d 2013/10/27 5 3
'''
#只能通过赋值得到改变后的值
af_df=df.reindex(index=["e","f","d","fo","fi","si"])
fenge("使用reindex并赋值后")
print(af_df.head(4))
'''
A B C
e 2013/10/28 5.0 4.0
f 2013/10/29 5.0 5.0
d 2013/10/27 5.0 3.0
fo NaN NaN NaN
'''
fenge("使用reindex的原数组")
print(df.head(4))
'''
A B C
a 2013/10/24 3 0
b 2013/10/25 4 1
c 2013/10/26 5 2
d 2013/10/27 5 3
'''