【数据操作与可视化】Pandas数据处理-Dataframe数据结构

42 阅读3分钟

Dataframe是类似于表格的二维数据结构,即数据以行和列的表格方式排列。Dataframe可以看成是以Series组成的字典。它和Series的区别在于,不但具有行索引,且具有列索引。

Dtaframe的特点如下:

  • 列可以是不同的数据类型
  • 大小可变,可以增加删除数据
  • 标记轴(行和列)
  • 可以对行和列执行算术运算

一、创建Dataframe

# 通过普通列表来创建一个dataframe
df1 = pd.DataFrame(['a', 'b', 'c', 'd'])
df1
# 通过一个嵌套列表来创建一个dataframe
df2 = pd.DataFrame([['one', 'a'], ['two', 'b'], ['three', 'c'], ['four', 'd']])
df2
# 通过一个字典来创建dataframe,相当于字典里面的值变成了每列的值,而字典的键就是列标签
dic = {'小写': ['a', 'b', 'c', 'd', 'e'], '大写': ['A', 'B', 'C', 'D', 'E']}  # 注意值列表长度要一致
df3 = pd.DataFrame(dic)
df3
# 指定index和columns
df3 = pd.DataFrame([['one', 'a'], ['two', 'b'], ['three', 'c'], ['four', 'b']],
        index=['A', 'B', 'C', 'D'],
        columns=['第一列', '第二列']
)
df3
# 获取index、columns和values
print(df3.index)
print(df3.values)
print(df3.columns)
# 修改index和columns,注意要全部一起设置
df3.index = ['line1', 'line2', 'line3', 'line4']
df3.columns = ['列1', '列2']
df3
# 单独修改某行index或某列column的名字,要用rename方法
df3.rename(index={'line1': '行1'})   # 如果要原地修改,需要配置inplace参数
df3.rename(columns={'列1': 'col1'})

二、Dataframe常用属性

# print(df3.shape)  # 查询dataframe的形状
# print(df3.index)  # 查询dataframe中行索引
# print(df3.columns)  # 查询dataframe中的列索引
# print(df3.dtypes)   # 查看列的数据类型
# print(df3.values)  # 查询dataframe中的值
# print(df3.T)       # 行列转换
# print(df3['列1'])    # 只显示指定列的值
# print(df3['列2'].value_counts())   # 统计df指定列中的数据个数,空值np.nan不计算在内
# print(df3['列2'].unique())    # 看指定的列有哪些唯一值
# print(len(df3['列2'].unique()))   # 统计指定列的唯一值的个数
# print(df3.nunique())      # 统计指定列df3[列名].nunique()或整个dataframe中唯一值的个数
# print(df3.describe())    # 描述dataframe的基本情况,针对数值型的列有效
# print(df3.info())      # 查看df每列的数据类型等
# print(df3.head())     # 查看前5行数据
# print(df3.tail())     # 查看末尾5行数据
  • Dataframe练习1
## 练习1:编写一个函数用来生成一个DataFrame,该函数可接收两个参数指定生成的DataFrame的行数和列数,dataframe里面的值是随机值。
import random
# 方法一,通过字典实现
def get_random_df(row, column):
    dic = {}
    for x in range(column):
        dic['列'+ str(x+1)] = [random.random() for x in range(row)]
    return pd.DataFrame(dic)
# 方法二、通过numpy来实现
def create_df(n,m):
    a=np.random.randint(1,100,n*m).reshape(n,m)
    df=pd.DataFrame(a)
    print(df)
get_random_df(3,10)
  • dataframe练习2
# 1. 构造100条人物数据并生成一个dataframe
from faker import Faker
import pandas as pd
fake = Faker(locale='zh_CN')
lst=[]
for i in range(1,101):
     lst.append(fake.simple_profile())
     # print(lst)
df=pd.DataFrame(lst)
print(df)
# 2. 获取index、columns和values
df.index
df.values
df.columns
# 3. 把列名都改为中文
df.columns = ['工作', '公司', '身份证号', '常住地址', '当前位置', '血型', '主页', '用户名', '姓名', '性别', '住址', '邮箱', '生日']
# 4. 统计df中的男女个数
df['性别'].value_counts()