Python 字典转 DataFrame

Python 字典转 DataFrame

在数据分析或者机器学习应用中,我们经常需要将字典转化为 DataFrame。DataFrame 是 Pandas 中的一个数据结构,类似于 Excel 中的表格。

什么是字典?什么是 DataFrame?

字典是 Python 常用的数据类型之一,它是由键值对组成的无序集合,可以通过键访问值。

下面是一个字典的例子:

data = {"name": ["Alice", "Bob", "Charlie", "Dave"],
        "age": [25, 32, 18, 47],
        "city": ["Beijing", "Shanghai", "Guangzhou", "Shenzhen"],
        "height": [165, 170, 180, 175]}

可以通过以下方式访问字典中的数据:

print(data["name"])  # 输出 ['Alice', 'Bob', 'Charlie', 'Dave']
print(data["age"])  # 输出 [25, 32, 18, 47]

DataFrame 是 Pandas 中的一种数据结构,它是一个带有标签的二维数组。每一列都可以有不同的数据类型(例如字符串、整数、浮点数等)。

下面是一个 DataFrame 的例子:

import pandas as pd

df = pd.DataFrame({"name": ["Alice", "Bob", "Charlie", "Dave"],
                   "age": [25, 32, 18, 47],
                   "city": ["Beijing", "Shanghai", "Guangzhou", "Shenzhen"],
                   "height": [165, 170, 180, 175]})

print(df)

输出结果:

       name  age       city  height
0     Alice   25    Beijing     165
1       Bob   32   Shanghai     170
2   Charlie   18  Guangzhou     180
3      Dave   47   Shenzhen     175

如何将字典转换为 DataFrame?

可以使用 Pandas 中的 DataFrame() 函数将字典数据转换为 DataFrame。该函数的语法如下:

df = pd.DataFrame(data)

例如,我们可以使用以下代码将上面的字典转换为 DataFrame:

import pandas as pd

data = {"name": ["Alice", "Bob", "Charlie", "Dave"],
        "age": [25, 32, 18, 47],
        "city": ["Beijing", "Shanghai", "Guangzhou", "Shenzhen"],
        "height": [165, 170, 180, 175]}

df = pd.DataFrame(data)

print(df)

输出结果与上面的示例相同。

如果想要指定 DataFrame 的列顺序,可以使用以下代码:

df = pd.DataFrame(data, columns=["name", "age", "city", "height"])

如果要选择只包括部分列,可以使用以下代码:

df = pd.DataFrame(data, columns=["name", "age"])

在这种情况下,只包括 “name” 和 “age” 两列,而 “city” 和 “height” 则被省略。

如果在字典中有缺失的键值对,可以使用 fillna() 方法进行填充。以下是一个例子:

import pandas as pd

data = {"name": ["Alice", "Bob", "Charlie", "Dave"],
        "age": [25, 32, 18, 47],
        "city": ["Beijing", "Shanghai", "Guangzhou", "Shenzhen"]}

df = pd.DataFrame(data).fillna(0)

print(df)

输出结果:

       name  age       city  height
0     Alice   25    Beijing     0.0
1       Bob   32   Shanghai     0.0
2   Charlie   18  Guangzhou     0.0
3      Dave   47   Shenzhen     0.0

如何对 DataFrame 进行操作?

下面是一些常用的 DataFrame 操作:

  • df.head(n):返回 DataFrame 中前 n 行,默认为 5。
  • df.tail(n):返回 DataFrame 中后 n 行,默认为 5。
  • df.shape:返回 DataFrame 的维度,即行数和列数。
  • df.columns:返回 DataFrame 的列名。
  • df.dtypes:返回 DataFrame 中每一列的数据类型。
  • df.info():输出 DataFrame 的基本信息,包括行数、列数、缺失值个数、每一列的数据类型等。
  • df.describe():输出 DataFrame 中数值型变量的基本统计量,包括个数、均值、标准差、最小值、最大值等。
  • df.sort_values(by=列名):根据指定的列进行排序。
  • df.groupby(by=列名):对 DataFrame 进行分组,通常和一些聚合函数(如 mean()sum() 等)一起使用。

下面是一些简单的例子:

import pandas as pd

data = {"name": ["Alice", "Bob", "Charlie", "Dave"],
        "age": [25, 32, 18, 47],
        "city": ["Beijing", "Shanghai", "Guangzhou", "Shenzhen"],
        "height": [165, 170, 180, 175]}

df = pd.DataFrame(data)

print(df.head())  # 输出前 5 行
print(df.tail())  # 输出后 5 行
print(df.shape)  # 输出维度
print(df.columns)  # 输出列名
print(df.dtypes)  # 输出数据类型
print(df.info())  # 输出基本信息
print(df.describe())  # 输出基本统计量
print(df.sort_values(by="age"))  # 根据年龄排序
print(df.groupby(by="city").mean())  # 按城市分组,并计算平均值

输出结果:

       name  age       city  height
0     Alice   25    Beijing     165
1       Bob   32   Shanghai     170
2   Charlie   18  Guangzhou     180
3      Dave   47   Shenzhen     175
       name  age       city  height
0     Alice   25    Beijing     165
1       Bob   32   Shanghai     170
2   Charlie   18  Guangzhou     180
3      Dave   47   Shenzhen     175
(4, 4)
Index(['name', 'age', 'city', 'height'], dtype='object')
name      object
age        int64
city      object
height     int64
dtype: object
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 4 entries, 0 to 3
Data columns (total 4 columns):
 #   Column  Non-Null Count  Dtype 
---  ------  --------------  ----- 
 0   name    4 non-null      object
 1   age     4 non-null      int64 
 2   city    4 non-null      object
 3   height  4 non-null      int64 
dtypes: int64(2), object(2)
memory usage: 256.0+ bytes
None
             age      height
count   4.000000    4.000000
mean   30.500000  172.500000
std    12.125724    6.454972
min    18.000000  165.000000
25%    23.250000  169.250000
50%    28.500000  172.500000
75%    35.750000  175.750000
max    47.000000  180.000000
       name  age       city  height
2   Charlie   18  Guangzhou     180
0     Alice   25    Beijing     165
1       Bob   32   Shanghai     170
3      Dave   47   Shenzhen     175
           age  height
city                  
Beijing     25     165
Guangzhou   18     180
Shanghai    32     170
Shenzhen    47     175

结论

使用 Pandas 中的 DataFrame() 函数可以轻松地将字典转换为 DataFrame,而 DataFrame 可以方便地对数据进行操作和分析。希望这篇文章对你学习 Python 数据分析有所帮助!记得熟悉 DataFrame 的基本操作和常用函数,可以让你更加高效地进行数据分析和处理。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程