使用Python中的字典值列表创建数据框架结构的解释
在数据分析中,我们经常需要用到数据框架(DataFrame)结构。Python中的pandas库提供了高效的数据框架操作方法。而使用字典值列表(List of Dictionaries)创建数据框架是一种常用的方法。本文将详细介绍如何使用Python中的字典值列表创建数据框架结构。
更多Python教程,请阅读:Python 教程
字典值列表
字典值列表是一种包含多个字典的列表,其中每个字典表示一条数据记录。例如:
employee = [
{'name': 'John', 'age': 32, 'gender': 'M', 'salary': 5000},
{'name': 'Mary', 'age': 28, 'gender': 'F', 'salary': 6000},
{'name': 'Tom', 'age': 45, 'gender': 'M', 'salary': 7500},
{'name': 'Jane', 'age': 33, 'gender': 'F', 'salary': 4500}
]
上面的例子中,包含4个字典的列表代表了4个员工的信息,每个字典中的键表示员工的属性,包括姓名、年龄、性别和工资。
创建数据框架
使用字典值列表创建数据框架的方法非常简单,只需要使用pandas中的DataFrame函数即可。例如,我们可以使用上面的employee列表创建数据框架:
import pandas as pd
df = pd.DataFrame(employee)
print(df)
输出结果如下:
name age gender salary
0 John 32 M 5000
1 Mary 28 F 6000
2 Tom 45 M 7500
3 Jane 33 F 4500
create dataframe
在这个例子中,我们首先导入了pandas库,通过DataFrame函数将employee列表转换成了一个数据框架。使用print函数输出数据框架,可以看到每个字典中的键被作为数据框架的列名,而字典中的值被按行组织在数据框架中。
需要注意的是,如果字典值列表中每个字典中包含的键不一致,那么数据框架中也将包含一样的列。例如,我们将上面employee列表中的John的年龄修改为None:
employee = [
{'name': 'John', 'age': None, 'gender': 'M', 'salary': 5000},
{'name': 'Mary', 'age': 28, 'gender': 'F', 'salary': 6000},
{'name': 'Tom', 'age': 45, 'gender': 'M', 'salary': 7500},
{'name': 'Jane', 'age': 33, 'gender': 'F', 'salary': 4500}
]
df = pd.DataFrame(employee)
print(df)
输出结果如下:
name age gender salary
0 John None M 5000
1 Mary 28.0 F 6000
2 Tom 45.0 M 7500
3 Jane 33.0 F 4500
create dataframe with None field
从结果中可以看到,数据框架中包含了age列,而John的age被表示为None。这是因为在数据框架中,缺失值用NaN表示。
列选择与重排
使用数据框架的最常见操作之一是选择列。我们可以使用dataframe[column_name]
来选择指定的列。例如,我们要选择salary列:
salary_df = df['salary']
print(salary_df)
select column from dataframe
输出结果如下:
0 5000
1 6000
2 7500
3 4500
Name: salary, dtype: int64
可以看到,输出结果中包含了选定列的完整信息,其中包括每个值的索引和类型。需要注意的是,因为我们使用的是字典值列表创建数据框架,所以数据框架中的列的顺序与字典中的键的顺序是一致的。如果我们需要按照指定的顺序展示列,可以通过指定列名的列表来完成:
selected_df = df[['name', 'salary', 'gender']]
print(selected_df)
select multiple columns from dataframe
输出结果如下:
name salary gender
0 John 5000 M
1 Mary 6000 F
2 Tom 7500 M
3 Jane 4500 F
从结果中可以看到,我们按照指定的列顺序展示了数据框架的子集。
行选择
除了选择列之外,我们还可以根据条件选择行。例如,我们要选择工资大于6000的员工信息:
selected_df = df[df['salary'] > 6000]
print(selected_df)
select subset rows from dataframe
输出结果如下:
name age gender salary
2 Tom 45 M 7500
从结果中可以看到,我们只选择到了工资大于6000的员工Tom的信息。我们使用了df[‘salary’] > 6000作为选择条件,该条件返回了所有salary列大于6000的行。在pandas中,我们可以使用所有支持的逻辑运算符来进行条件选择。
添加列
数据框架中的列可以通过字典值列表中的字典添加。例如,我们添加一个新的列deduction,包含员工工资的10%扣除:
for i in range(len(employee)):
deduction = employee[i]['salary']*0.1
employee[i]['deduction'] = deduction
df = pd.DataFrame(employee)
print(df)
add column to dataframe
输出结果如下:
name age gender salary deduction
0 John 32 M 5000 500.0
1 Mary 28 F 6000 600.0
2 Tom 45 M 7500 750.0
3 Jane 33 F 4500 450.0
可以看到,我们添加了新列deduction。在循环中,我们遍历了employee的每个字典,计算扣除,然后添加一个新的键deduction到字典中。最后,我们使用字典值列表创建了一个数据框架。
如果我们需要添加已经存在的列,我们可以在数据框架上直接操作,例如:
df['bonus'] = [0, 1000, 2000, 500]
print(df)
add existing column to dataframe
输出结果如下:
name age gender salary deduction bonus
0 John 32 M 5000 500.0 0
1 Mary 28 F 6000 600.0 1000
2 Tom 45 M 7500 750.0 2000
3 Jane 33 F 4500 450.0 500
索引与选取
数据框架的行可以通过数字或索引进行选择。例如,我们可以通过数字选择第3行:
row = df.iloc[2]
print(row)
select a row from dataframe using index
输出结果如下:
name Tom
age 45
gender M
salary 7500
deduction 750
bonus 2000
Name: 2, dtype: object
可以看到,我们选择到了第3行的信息。
如果我们需要通过索引选择特定的行,我们可以将索引设置为数据框架中的一列,然后使用loc函数查找索引:
df.set_index('name', inplace=True)
selected_row = df.loc['Tom']
print(selected_row)
以上代码中,我们将name列设置为索引,然后使用loc函数查找Tom的信息。输出结果如下:
age 45
gender M
salary 7500
deduction 750
bonus 2000
Name: Tom, dtype: object
可以看到,我们使用索引成功地选择了Tom的信息。
需要注意的是,如果我们选择的行数超过了数据框架的大小,将会报错。因此,在使用索引选择行之前,我们需要确保索引值是唯一的,并且在数据框架中至少存在。
更新数据
更新数据框架中的数据可以使用iloc或loc函数以及赋值操作符完成。例如,我们要将Tom的工资更新为8000:
df.loc['Tom', 'salary'] = 8000
print(df)
update value in dataframe
输出结果如下:
age gender salary deduction bonus
name
John 32 M 5000 500.0 0
Mary 28 F 6000 600.0 1000
Tom 45 M 8000 750.0 2000
Jane 33 F 4500 450.0 500
可以看到,我们使用了loc函数选择Tom的salary值,然后将该值赋值为8000,成功地更新了数据框架中的数据。
删除列和行
在使用数据框架时,我们也可能需要删除一些列或行。例如,我们要删除提成bonus列:
df.drop(columns=['bonus'], inplace=True)
print(df)
delete column from dataframe
输出结果如下:
age gender salary deduction
name
John 32 M 5000 500.0
Mary 28 F 6000 600.0
Tom 45 M 8000 750.0
Jane 33 F 4500 450.0
可以看到,我们使用drop函数删除了指定的列。需要注意的是,drop函数并不直接改变数据框架,而是返回了一个新的数据框架,因此我们需要将inplace参数设置为True才能实现真正的删除。
如果我们需要删除指定的行,可以使用drop函数的index参数:
df.drop(index='Tom', inplace=True)
print(df)
delete row from dataframe
输出结果如下:
age gender salary deduction
name
John 32 M 5000 500.0
Mary 28 F 6000 600.0
Jane 33 F 4500 450.0
可以看到,我们成功地删除了Tom的信息。
数据框架的属性
在使用数据框架时,我们可以使用一些常用的属性来获取数据框架的信息。例如,我们可以使用shape属性获取数据框架的形状:
print(df.shape)
output dataframe shape
输出结果为:
(3, 4)
可以看到,数据框架有3行和4列。
我们还可以使用describe函数来获取数据框架的统计信息:
print(df.describe())
output dataframe summary statistics
输出结果为:
age salary deduction
count 3.000000 3.000000 3.000000
mean 31.000000 5166.666667 516.666667
std 2.645751 753.778017 75.377802
min 28.000000 4500.000000 450.000000
25% 30.000000 4750.000000 475.000000
50% 32.000000 5000.000000 500.000000
75% 32.500000 5500.000000 550.000000
max 33.000000 6000.000000 600.000000
可以看到,我们得到了数据框架的一些统计数据,包括计数、平均值、标准差、最小值、25%分位数、50%分位数、75%分位数和最大值。
数据可视化
除了使用属性和函数来分析数据框架之外,我们还可以使用图表或图形来更加直观地展示数据。在pandas中,我们可以使用数据框架自带的plot函数来绘制图表。例如,我们可以绘制一个员工工资的柱状图:
df['salary'].plot(kind='bar')
plt.title('Employee Salary')
plt.xlabel('Employee Name')
plt.ylabel('Salary')
plt.show()
可以看到,我们成功地绘制了一个柱状图,展示了每个员工的工资。
如果我们需要绘制其他类型的图表,可以使用plot函数的kind参数。常用的图表类型包括折线图、散点图、面积图、箱线图等。在绘制图表时,我们也可以添加标题、x轴和y轴标签等元素来更好地展示数据。
综上所述,pandas是一个非常有用的数据分析工具,可以帮助我们有效地处理和分析数据。在工作中,熟练掌握pandas的使用将会使数据分析的过程更加高效和准确。