pandas学习-4

2018-08-12  本文已影响4人  蓝剑狼

Pandas数据结构Dataframe:基本概念及创建

二维数组"Dataframe:是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值、字符串、布尔值等。
Dataframe中的数据以一个或多个二维块存放,不是列表、字典或一维数组结构。
# Dataframe 数据结构
# Dataframe是一个表格型的数据结构,“带有标签的二维数组”。
# Dataframe带有index(行标签)和columns(列标签)

data = {'name':['Jack','Tom','Mary'],
        'age':[18,19,20],
       'gender':['m','m','w']}
frame = pd.DataFrame(data)
frame_1 = pd.DataFrame(data,index=range(1,4))
print("1".center(40,'*'))
print(frame) 
print("2".center(40,'*'))
print(frame_1)
print("3".center(40,'*'))
print(type(frame))
print("4".center(40,'*'))
print(frame.index,'\n该数据类型为:',type(frame.index))
print("5".center(40,'*'))
print(frame.columns,'\n该数据类型为:',type(frame.columns))
print("5".center(40,'*'))
print(frame.values,'\n该数据类型为:',type(frame.values))
# # 查看数据,数据类型为dataframe
# .index查看行标签
# .columns查看列标签
# .values查看值,数据类型为ndarray
# 执行结果
*******************1********************
   name  age gender
0  Jack   18      m
1   Tom   19      m
2  Mary   20      w
*******************2********************
   name  age gender
1  Jack   18      m
2   Tom   19      m
3  Mary   20      w
*******************3********************
<class 'pandas.core.frame.DataFrame'>
*******************4********************
RangeIndex(start=0, stop=3, step=1) 
该数据类型为: <class 'pandas.core.indexes.range.RangeIndex'>
*******************5********************
Index(['name', 'age', 'gender'], dtype='object') 
该数据类型为: <class 'pandas.core.indexes.base.Index'>
*******************5********************
[['Jack' 18 'm']
 ['Tom' 19 'm']
 ['Mary' 20 'w']] 
该数据类型为: <class 'numpy.ndarray'>
# Dataframe 创建方法一:由数组/list组成的字典
# 创建方法:pandas.Dataframe()

data_1 = {'a':[1,2,3],
        'b':[3,4,5],
        'c':[5,6,7]}
data_2 = {'one':np.random.rand(3),
        'two':np.random.rand(3)}   # 这里如果尝试  'two':np.random.rand(4) 会怎么样?
print("1".center(40,'*'))
print(data_1)
print("2".center(40,'*'))
print(data_2)

df_1 = pd.DataFrame(data_1)
df_2 = pd.DataFrame(data_2)
print("3".center(40,'*'))
print(df_1)
print("4".center(40,'*'))
print(df_2)
# 由数组/list组成的字典 创建Dataframe,columns为字典key,index为默认数字标签
# 字典的值的长度必须保持一致!

df_1 = pd.DataFrame(data_1, columns = ['b','c','a','d'])
print("5".center(40,'*'))
print(df_1)
df_1 = pd.DataFrame(data_1, columns = ['b','c'])
print("6".center(40,'*'))
print(df_1)
# columns参数:可以重新指定列的顺序,格式为list,如果现有数据中没有该列(比如'd'),则产生NaN值
# 如果columns重新指定时候,列的数量可以少于原数据

df_2 = pd.DataFrame(data2, index = ['f1','f2','f3'])  # 这里如果尝试  index = ['f1','f2','f3','f4'] 会怎么样?
print("7".center(40,'*'))
print(df_2)
# index参数:重新定义index,格式为list,长度必须保持一致
#执行结果
*******************1********************
{'a': [1, 2, 3], 'b': [3, 4, 5], 'c': [5, 6, 7]}
*******************2********************
{'one': array([0.20993819, 0.38338562, 0.64550572]), 'two': array([0.28085973, 0.99260134, 0.74315454])}
*******************3********************
   a  b  c
0  1  3  5
1  2  4  6
2  3  5  7
*******************4********************
        one       two
0  0.209938  0.280860
1  0.383386  0.992601
2  0.645506  0.743155
*******************5********************
   b  c  a    d
0  3  5  1  NaN
1  4  6  2  NaN
2  5  7  3  NaN
*******************6********************
   b  c
0  3  5
1  4  6
2  5  7
*******************7********************
         one       two
f1  0.404180  0.073073
f2  0.148756  0.285181
f3  0.244382  0.077084
# Dataframe 创建方法二:由Series组成的字典

data1 = {'one':pd.Series(np.random.rand(2)),
        'two':pd.Series(np.random.rand(3))}  # 没有设置index的Series
data2 = {'one':pd.Series(np.random.rand(2), index = ['a','b']),
        'two':pd.Series(np.random.rand(3),index = ['a','b','c'])}  # 设置了index的Series
print("1".center(40,'+'))
print(data1)
print("2".center(40,'+'))
print(data2)
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
print("3".center(40,'+'))
print(df1)
print("4".center(40,'+'))
print(df2)
# 由Seris组成的字典 创建Dataframe,columns为字典key,index为Series的标签(如果Series没有指定标签,则是默认数字标签)
# Series可以长度不一样,生成的Dataframe会出现NaN值
#执行结果
+++++++++++++++++++1++++++++++++++++++++
{'one': 0    0.208377
1    0.880316
dtype: float64, 'two': 0    0.570044
1    0.564635
2    0.691983
dtype: float64}
+++++++++++++++++++2++++++++++++++++++++
{'one': a    0.246907
b    0.847142
dtype: float64, 'two': a    0.919989
b    0.115845
c    0.800938
dtype: float64}
+++++++++++++++++++3++++++++++++++++++++
        one       two
0  0.208377  0.570044
1  0.880316  0.564635
2       NaN  0.691983
+++++++++++++++++++4++++++++++++++++++++
        one       two
a  0.246907  0.919989
b  0.847142  0.115845
c       NaN  0.800938
# Dataframe 创建方法三:通过二维数组直接创建

ar = np.random.rand(9).reshape(3,3)
print("1".center(40,'*'))
print(ar)
df1 = pd.DataFrame(ar)
df2 = pd.DataFrame(ar, index = ['a', 'b', 'c'], columns = ['one','two','three'])  # 可以尝试一下index或columns长度不等于已有数组的情况
print("2".center(40,'*'))
print(df1)
print("3".center(40,'*'))
print(df2)
# 通过二维数组直接创建Dataframe,得到一样形状的结果数据,如果不指定index和columns,两者均返回默认数字格式
# index和colunms指定长度与原数组保持一致

#执行结果
*******************1********************
[[0.89541404 0.24214137 0.21055711]
 [0.15135701 0.96419989 0.11586075]
 [0.06456592 0.26280503 0.77973115]]
*******************2********************
          0         1         2
0  0.895414  0.242141  0.210557
1  0.151357  0.964200  0.115861
2  0.064566  0.262805  0.779731
*******************3********************
        one       two     three
a  0.895414  0.242141  0.210557
b  0.151357  0.964200  0.115861
c  0.064566  0.262805  0.779731
# Dataframe 创建方法四:由字典组成的列表

data = [{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]
print("1".center(40,'*'))
print(data)
df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data, index = ['a','b'])
df3 = pd.DataFrame(data, columns = ['one','two'])
print("2".center(40,'*'))
print(df1)
print("3".center(40,'*'))
print(df2)
print("4".center(40,'*'))
print(df3)
# 由字典组成的列表创建Dataframe,columns为字典的key,index不做指定则为默认数组标签
# colunms和index参数分别重新指定相应列及行标签
#执行结果
*******************1********************
[{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]
*******************2********************
   one  three  two
0    1    NaN    2
1    5   20.0   10
*******************3********************
   one  three  two
a    1    NaN    2
b    5   20.0   10
*******************4********************
   one  two
0    1    2
1    5   10
# Dataframe 创建方法五:由字典组成的字典

data = {'Jack':{'math':90,'english':89,'art':78},
       'Marry':{'math':82,'english':95,'art':92},
       'Tom':{'math':78,'english':67}}
df1 = pd.DataFrame(data)
print("1".center(40,'*'))
print(df1)
# 由字典组成的字典创建Dataframe,columns为字典的key,index为子字典的key

df2 = pd.DataFrame(data, columns = ['Jack','Tom','Bob'])
df3 = pd.DataFrame(df1,index=['a','b','c'])
print("2".center(40,'*'))
print(df2)
print("3".center(40,'*'))
print(df3)
# columns参数可以增加和减少现有列,如出现新的列,值为NaN
# index在这里和之前不同,并不能改变原有index,如果指向新的标签,值为NaN (非常重要!)
#执行结果
*******************1********************
         Jack  Marry   Tom
art        78     92   NaN
english    89     95  67.0
math       90     82  78.0
*******************2********************
         Jack   Tom  Bob
art        78   NaN  NaN
english    89  67.0  NaN
math       90  78.0  NaN
*******************3********************
   Jack  Marry  Tom
a   NaN    NaN  NaN
b   NaN    NaN  NaN
c   NaN    NaN  NaN
上一篇下一篇

猜你喜欢

热点阅读