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

本文深入讲解了Pandas库中DataFrame的使用方法,包括其基本概念、数据类型、创建方式及参数调整技巧。从由数组、字典、Series到二维数组的各种创建途径,详细解析了index和columns的作用及设定方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Dataframe基本概念

1)Dataframe(“带有标签的二维数组”):是一个表格型的数据结构,包含一组有序的列,其列的值类型可以是数值、字符串、布尔值等。

2)Dataframe中的数据以一个或多个二维块存放,不是列表、字典或一维数组结构。Dataframe带有index(行标签)和columns(列标签)

import pandas as pd
import numpy as np

data = {'name':['Jack','Tom','Mary'],
        'age':[18,19,20],
       'gender':['m','m','w']}
frame = pd.DataFrame(data)
print(frame)  
print(type(frame))

–> 输出的结果为:

   name  age gender
0  Jack   18      m
1   Tom   19      m
2  Mary   20      w
<class 'pandas.core.frame.DataFrame'>

3) Dataframe中的数据类型

.index查看行标签

.columns查看列标签

.values查看值,数据类型为ndarray

print(frame.index,'\n该数据类型为:',type(frame.index))
print(frame.columns,'\n该数据类型为:',type(frame.columns))
print(frame.values,'\n该数据类型为:',type(frame.values))

–> 输出的结果为:

angeIndex(start=0, stop=3, step=1) 
该数据类型为: <class 'pandas.core.indexes.range.RangeIndex'>

Index(['name', 'age', 'gender'], dtype='object') 
该数据类型为: <class 'pandas.core.indexes.base.Index'>

[['Jack' 18 'm']
 ['Tom' 19 'm']
 ['Mary' 20 'w']] 
该数据类型为: <class 'numpy.ndarray'>

2. Dataframe创建

2.1 创建方法一:由数组/list组成的字典

1)创建方法:pandas.Dataframe()
2)由数组/list组成的字典 创建Dataframe,columns为字典key,index为默认数字标签
3)注意: 字典的值的长度必须保持一致!

data1 = {'a':[1,2,3],
        'b':[3,4,5],
        'c':[5,6,7]}
data2 = {'one':np.random.rand(3),
        'two':np.random.rand(3)}  
print(data1)
print(data2)

–> 输出的结果为:

{'a': [1, 2, 3], 'b': [3, 4, 5], 'c': [5, 6, 7]}
{'one': array([0.55231278, 0.11346486, 0.04460787]), 'two': array([0.96373403, 0.88178355, 0.80008568])}

将数据转化为Dataframe

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.004175  0.804657
1  0.998857  0.714633
2  0.775254  0.070222

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

5) 如果columns重新指定时候,列的数量可以少于原数据

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

6) index参数:重新定义index,格式为list,长度必须保持一致

df2 = pd.DataFrame(data2, index = ['f1','f2','f3']) 
print(df2)

–> 输出的结果为:

         one       two
f1  0.492391  0.388535
f2  0.892257  0.774170
f3  0.286267  0.063995
2.2 创建方法二:由Series组成的字典

1)由Series组成的字典 创建Dataframe,columns为字典key,index为Series的标签(如果Series没有指定标签,则是默认数字标签)

2)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
print(data1)
print(data2)

–> 输出的结果为:

{'one': 0    0.938612
1    0.065137
dtype: float64, 'two': 0    0.700473
1    0.515553
2    0.205660
dtype: float64}

{'one': a    0.639449
b    0.735204
dtype: float64, 'two': a    0.319101
b    0.910293
c    0.836814
dtype: float64}

将数据转化为Dataframe

df1 = pd.DataFrame(data1)
df2 = pd.DataFrame(data2)
print(df1)
print(df2)

–> 输出的结果为:

        one       two
0  0.653868  0.059260
1  0.913769  0.245643
2       NaN  0.408164

        one       two
a  0.629215  0.608634
b  0.946682  0.220755
c       NaN  0.763010
2.3 创建方法三:通过二维数组直接创建

1) 通过二维数组直接创建Dataframe,得到一样形状的结果数据,如果不指定index和columns,两者均返回默认数字格式

2) index和colunms指定长度与原数组保持一致

ar = np.random.rand(9).reshape(3,3)
print(ar)
df1 = pd.DataFrame(ar)
print(df1)

–> 输出的结果为:(不指定index和columns)

[[0.65868808 0.33375653 0.39760116]
 [0.6693393  0.84839768 0.35256847]
 [0.8817482  0.26198774 0.80020949]]
 
          0         1         2
0  0.658688  0.333757  0.397601
1  0.669339  0.848398  0.352568
2  0.881748  0.261988  0.800209

指定index和columns下创建数据

df2 = pd.DataFrame(ar, index = ['a', 'b', 'c'], columns = ['one','two','three']) 
print(df2)

–> 输出的结果为:

        one       two     three
a  0.658688  0.333757  0.397601
b  0.669339  0.848398  0.352568
c  0.881748  0.261988  0.800209
★★★★★2.4 创建方法四:由字典组成的列表

1) 由字典组成的列表创建Dataframe,columns为字典的key,index不做指定则为默认数组标签

2) colunms和index参数分别重新指定相应列及行标签

data = [{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]
print(data)
df1 = pd.DataFrame(data)

–> 输出的结果为:(默认情况下)

[{'one': 1, 'two': 2}, {'one': 5, 'two': 10, 'three': 20}]

   one  two  three
0    1    2    NaN
1    5   10   20.0

修改index和columns

df2 = pd.DataFrame(data, index = ['a','b'])
df3 = pd.DataFrame(data, columns = ['one','two'])
print(df2)
print(df3)

–> 输出的结果为:

   one  two  three
a    1    2    NaN
b    5   10   20.0

   one  two
0    1    2
1    5   10
2.5 创建方法五:由字典组成的字典

1)columns参数可以增加和减少现有列,如出现新的列,值为NaN

2)index在这里和之前不同,并不能改变原有index,如果指向新的标签,值为NaN (非常重要!)

3)由字典组成的字典创建Dataframe,columns为字典的key,index为子字典的key

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
math       90     82  78.0
english    89     95  67.0
art        78     92   NaN

修改index和columns参数后

df2 = pd.DataFrame(data, columns = ['Jack','Tom','Bob'])
df3 = pd.DataFrame(data, index = ['a','b','c'])
print(df2)
print(df3)

–> 输出的结果为:

         Jack   Tom  Bob
math       90  78.0  NaN
english    89  67.0  NaN
art        78   NaN  NaN

   Jack  Marry  Tom
a   NaN    NaN  NaN
b   NaN    NaN  NaN
c   NaN    NaN  NaN
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lys_828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值