一、创建 DataFrame 对象
(1)从字典创建
可以使用字典来创建 DataFrame,其中字典的键将成为列名,字典的值(通常是列表)将成为列数据。例如:
import pandas as pd
data = {'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]}
df = pd.DataFrame(data)
print(df)
在这个例子中,data是一个包含name和age两个键的字典。pd.DataFrame(data)创建了一个 DataFrame 对象df,它有两列,name列包含['Alice', 'Bob', 'Charlie'],age列包含[25, 30, 35]。
(2)从列表的字典创建
当数据是一个字典的列表时,每个字典代表一行数据。例如:
data_list = [{'name': 'Alice', 'age': 25}, {'name': 'Bob', 'age': 30}, {'name': 'Charlie', 'age': 35}]
df = pd.DataFrame(data_list)
print(df)
这里的data_list是一个包含三个字典的列表,每个字典有name和age两个键值对,创建的 DataFrame 同样有name和age两列,并且每一行对应一个字典中的数据。
(3)从 NumPy 数组创建
如果有 NumPy 数组,可以将其转换为 DataFrame。假设已经有一个二维的 NumPy 数组,并且有对应的列名列表,就可以创建 DataFrame。例如:
import numpy as np
np_array = np.array([[1, 2], [3, 4], [5, 6]])
columns = ['col1', 'col2']
df = pd.DataFrame(np_array, columns = columns)
print(df)
这个np_array是一个形状为(3, 2)的二维数组,通过指定columns列表,将数组的列与列名对应起来,创建了一个包含两列col1和col2的 DataFrame。
二、查看 DataFrame 的基本信息
(1)查看头部和尾部数据
可以使用head()和tail()方法来查看 DataFrame 的前几行和后几行数据。默认情况下,head()显示前 5 行,tail()显示后 5 行。例如:
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'], 'age': [25, 30, 35, 40, 45]})
print(df.head())
print(df.tail(3))
在第一个print语句中,df.head()显示了 DataFrame 的前 5 行数据。在第二个print语句中,df.tail(3)显示了 DataFrame 的后 3 行数据。
(2)查看列名和索引
通过columns属性可以查看列名,通过index属性可以查看索引。例如:
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]})
print(df.columns)
print(df.index)
这里df.columns返回一个包含列名name和age的Index对象,df.index返回一个默认从 0 开始的整数索引RangeIndex(start = 0, stop = 3, step = 1)。
(3)查看数据形状和数据类型
shape属性返回 DataFrame 的形状(行数和列数),dtypes属性返回每列的数据类型。例如:
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]})
print(df.shape)
print(df.dtypes)
对于这个 DataFrame,df.shape返回(3, 2),表示有 3 行 2 列。df.dtypes返回name列是object类型(通常是字符串),age列是int64类型。
三、选择数据
(1)按列选择
可以通过列名来选择列。例如,使用以下方式选择name列:
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]})
name_column = df['name']
print(name_column)
也可以使用[]操作符并传入列名的列表来选择多列,如:
columns = df[['name', 'age']]
print(columns)
(2)按行选择
可以使用loc(基于标签)和iloc(基于整数位置)来选择行。例如,使用loc选择索引为 0 的行:
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]}, index=['a', 'b', 'c'])
row_a = df.loc['a']
print(row_a)
如果要使用iloc选择第一行(索引为 0),可以这样做:
first_row = df.iloc[0]
print(first_row)
还可以使用切片来选择多行,如df.loc['a':'b']会选择索引从a到b的行(包含a和b),df.iloc[0:2]会选择第一行和第二行(索引为 0 和 1)。
(3)条件选择
可以根据条件来选择满足条件的数据。例如,选择age大于 30 的行:
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]})
selected_rows = df[df['age']>30]
print(selected_rows)
在这个例子中,df['age']>30返回一个布尔型的 Series,其中True表示该行的age大于 30。将这个布尔型 Series 作为索引传递给df,就可以选择满足条件的行。
四、数据操作
(1)添加列
可以直接给 DataFrame 对象添加新列。例如,添加一个gender列:
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]})
df['gender'] = ['F', 'M', 'M']
print(df)
这里通过df['gender'] = ['F', 'M', 'M']为 DataFrame 添加了一个名为gender的新列,新列的值为['F', 'M', 'M']。
(2)删除列
使用drop()方法可以删除列。例如,删除gender列:
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35], 'gender': ['F', 'M', 'M']})
df = df.drop('gender', axis = 1)
print(df)
注意drop()方法默认是删除行,所以需要指定axis = 1来表示删除列。
(3)修改列的值
可以通过直接赋值来修改列的值。例如,将age列的值都加 1:
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]})
df['age'] = df['age']+1
print(df)
数据排序
(4)按列排序
使用sort_values()方法可以按列的值进行排序。例如,按age列升序排序:
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]})
sorted_df = df.sort_values('age')
print(sorted_df)
如果要按降序排序,可以指定ascending = False,如df.sort_values('age', ascending = False)。
(5)按索引排序
使用sort_index()方法可以按索引进行排序。例如,当索引是乱序的时候,可以这样排序:
df = pd.DataFrame({'name': ['Alice', 'Bob', 'Charlie'], 'age': [25, 30, 35]}, index=[2, 1, 0])
sorted_df = df.sort_index()
print(sorted_df)
DataFrame 是 pandas 库中非常强大的数据结构,在数据处理和分析中有着广泛的应用,以上只是一些基本的使用方法,还有很多高级功能可以探索。