Pandas模块之DataFrame:01-基本概念及创建

"二维数组"Dataframe:是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值、字符串、布尔值等。Dataframe中的数据以一个或多个二维块存放,不是列表、字典或一维数组结构。

DataFrame带有index(行标签)和columns(列标签)
示例:

data = {'name':['Jack','Tom','Mary'],
        'age':[18,19,20],
       'gender':['m','m','w']}
frame = pd.DataFrame(data)
print(frame)  
print(type(frame))
print(frame.index,'\n该数据类型为:',type(frame.index))
print(frame.columns,'\n该数据类型为:',type(frame.columns))
print(frame.values,'\n该数据类型为:',type(frame.values))
=================================
   age gender  name
0   18      m  Jack
1   19      m   Tom
2   20      w  Mary
<class 'pandas.core.frame.DataFrame'>
RangeIndex(start=0, stop=3, step=1) 
该数据类型为: <class 'pandas.core.indexes.range.RangeIndex'>
Index(['age', 'gender', 'name'], dtype='object') 
该数据类型为: <class 'pandas.core.indexes.base.Index'>
[[18 'm' 'Jack']
 [19 'm' 'Tom']
 [20 'w' 'Mary']] 
该数据类型为: <class 'numpy.ndarray'>
Dataframe 创建方法
方法1:由数组/list组成的字典

由数组/list组成的字典 创建Dataframe,columns为字典key,index为默认数字标签,同时要求每个字典内值的长度保存一致。

data1 = {'a':[1,2,3],
        'b':[3,4,5],
        'c':[5,6,7]}
data2 = {'one':np.random.rand(3),
        'two':np.random.rand(3)}
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
print(df1)
print(df2)
=========================
   a  b  c
0  1  3  5
1  2  4  6
2  3  5  7
        one       two
0  0.127220  0.524514
1  0.782480  0.663941
2  0.599586  0.846812

columns参数:可以重新指定列的顺序,格式为list,如果现有数据中没有该列(比如’d’),则产生NaN值。

df1 = pd.DataFrame(data1, columns = ['b','c','a','d'])
print(df1)
df1 = pd.DataFrame(data1, columns = ['b','c'])
print(df1)
=========================
   b  c  a    d
0  3  5  1  NaN
1  4  6  2  NaN
2  5  7  3  NaN
   b  c
0  3  5
1  4  6
2  5  7

index参数:重新定义index,格式为list,长度必须与数据的行数保持一致

df2 = pd.DataFrame(data2, index = ['f1','f2','f3']) 
 # 这里如果尝试  index = ['f1','f2','f3','f4'] 会报错
print(df2)
=========================
         one       two
f1  0.127220  0.524514
f2  0.782480  0.663941
f3  0.599586  0.846812
方法2:由Series组成的字典

由Seris组成的字典 创建Dataframe,columns为字典key,index为Series的标签(如果Series没有指定标签,则是默认数字标签)。Series可以长度不一样,生成的Dataframe会自动填充NaN值。

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
df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
print(df1)
print(df2)
=========================
        one       two
0  0.640470  0.101404
1  0.161086  0.018993
2       NaN  0.196439
        one       two
a  0.596995  0.298154
b  0.598786  0.042650
c       NaN  0.961661
方法3:通过二维数组直接创建

先创建数据,再指定行列(如果不指定,会默认用数字标签表示行列号)

array = np.random.rand(9).reshape(3,3)
df1 = pd.DataFrame(array)
print(df1)
=========================
          0         1         2
0  0.915834  0.921198  0.421943
1  0.344087  0.423434  0.286973
2  0.122821  0.663230  0.945398

# 指定行列标签时,需要保证行列长度和数据量一致
df2 = pd.DataFrame(data = array,index = list('abc'),columns = list('def'))
print(df2)
=========================
          d         e         f
a  0.915834  0.921198  0.421943
b  0.344087  0.423434  0.286973
c  0.122821  0.663230  0.945398
方法4:由字典组成的列表

源数据为字典列表,一个字典表示一行数据。
由字典组成的列表创建Dataframe,columns为字典的key,index不做指定则为默认数组标签。

data = [{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]
df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data, index = ['a','b'])
df3 = pd.DataFrame(data, columns = ['one','two'])
print(df1)
print(df2)
print(df3)
=========================
   one  three  two
0    1    NaN    2
1    5   20.0   10
   one  three  two
a    1    NaN    2
b    5   20.0   10
   one  two
0    1    2
1    5   10
方法5:由字典组成的字典

由字典组成的字典创建Dataframe,columns为字典的key,index为子字典的key。
columns参数可以增加和减少现有列,如出现新的列,填充值为NaN。
index在这里和之前不同,并不能改变原有index,如果指向新的标签,值为NaN (非常重要!)

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(df1)
=========================
         Jack  Marry   Tom
art        78     92   NaN
english    89     95  67.0
math       90     82  78.0


df2 = pd.DataFrame(data, columns = ['Jack','Tom','Bob'])
df3 = pd.DataFrame(data, index = ['a','b','c'])
print(df2)
print(df3)
=========================
         Jack   Tom  Bob
art        78   NaN  NaN
english    89  67.0  NaN
math       90  78.0  NaN
   Jack  Marry  Tom
a   NaN    NaN  NaN
b   NaN    NaN  NaN
c   NaN    NaN  NaN

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值