Pandas 从Series创建DataFrame
在本文中,我们将介绍如何通过Pandas将Series对象转换为DataFrame对象。
阅读更多:Pandas 教程
什么是Series和DataFrame?
在介绍如何将Series转换为DataFrame之前,让我们先了解一下Series和DataFrame是什么。
Series是一种一维数组对象,它可以保存任何类型的数据(整数,浮点数,字符串,Python对象等),并附有一个索引标签。例如,下面是一个包含4个整数的Series:
import pandas as pd
s = pd.Series([10, 20, 30, 40])
print(s)
输出:
0 10
1 20
2 30
3 40
dtype: int64
DataFrame是一个二维表格数据结构,可以存储不同类型的数据,并且每列可以有不同的数据类型。你可以将它看作是一个电子表格或者SQL表。DataFrame通常由行和列组成。下面是一个包含4行和2列的DataFrame:
df = pd.DataFrame({
'name': ['Alice', 'Bob', 'Charlie', 'David'],
'age': [25, 32, 18, 47],
})
print(df)
输出:
name age
0 Alice 25
1 Bob 32
2 Charlie 18
3 David 47
在上面的DataFrame中,’name’和’age’是列标签,每一列的类型可以是整数、浮点数、字符串和Python对象等。
从Series创建DataFrame
有时候我们需要把一个包含多个Series的数据集合并到一个DataFrame中,可以通过以下方式进行操作。
首先,让我们创建两个包含不同类型数据的Series:
s1 = pd.Series(['a', 'b', 'c'])
s2 = pd.Series([1, 2, 3])
接下来,我们可以使用pd.DataFrame函数将这两个Series对象转换为一个DataFrame对象。我们可以把两个Series对象作为字典传递给pd.DataFrame函数。键将成为DataFrame的列标签,而值将成为DataFrame的列数据。
df = pd.DataFrame({'A': s1, 'B': s2})
print(df)
输出:
A B
0 a 1
1 b 2
2 c 3
在上面的示例中,我们创建了一个包含两个Series对象的DataFrame。Series s1被分配给列’A’,Series s2被分配给列’B’。
从多个Series创建DataFrame
当你想要将多个Series组合成一个DataFrame时,你可以将所有的Series对象以列表形式传递给pd.DataFrame函数。假设我们有三个Series,分别是’s1’、’s2’和’s3’,下面的代码将它们转换为一个DataFrame:
s1 = pd.Series(['a', 'b', 'c'])
s2 = pd.Series([1, 2, 3])
s3 = pd.Series([4, 5, 6])
df = pd.DataFrame([s1, s2, s3])
print(df)
输出:
0 1 2
0 a b c
1 1 2 3
2 4 5 6
在上面的示例中,我们创建了一个包含三个Series对象的DataFrame。每个Series对象是DataFrame的一行,第一行包含s1的值,第二行包含s2的值,第三行包含s3的值。这种用法不太常见,因为它假设每个Series对象都有相同的长度和列标签。
将Series转换为列
我们可以使用以下方式来创建一个新的DataFrame,将s1和s2存储为带有列标签’A’和’B’的两列数据:
df = pd.DataFrame({'A': s1, 'B': s2})
print(df)
输出:
A B
0 a 1
1 b 2
2 c 3
在上面的示例中,我们使用了与前面相同的方法将s1和s2转换为DataFrame。每个Series对象成为一个DataFrame的列,并使用所选的列标签作为列名。注意到在新的DataFrame中,索引仍然是0、1、2。
列数据类型的转换
我们可以使用dtype参数来指定每一列的数据类型。例如,下面的代码将s1、s2和s3转换为一个DataFrame,并将第1列指定为字符串类型,第2列和第3列指定为浮点数类型:
s1 = pd.Series(['a', 'b', 'c'])
s2 = pd.Series([1.0, 2.0, 3.0])
s3 = pd.Series([4.0, 5.0, 6.0])
df = pd.DataFrame({'A': s1, 'B': s2, 'C': s3}, dtype=str)
df[['B', 'C']] = df[['B', 'C']].astype(float)
print(df.dtypes)
输出:
A object
B float64
C float64
dtype: object
在上面的示例中,我们使用dtype参数将’A’列指定为字符串类型。然后,我们使用astype函数将’B’和’C’列转换为浮点数类型。最后,我们使用dtypes属性打印每个列的数据类型。
修改列标签
我们可以使用columns属性修改列标签。例如,下面的代码将DataFrame中的列标签从’A’、’B’、’C’更改为’one’、’two’、’three’:
s1 = pd.Series(['a', 'b', 'c'])
s2 = pd.Series([1.0, 2.0, 3.0])
s3 = pd.Series([4.0, 5.0, 6.0])
df = pd.DataFrame({'A': s1, 'B': s2, 'C': s3})
df.columns = ['one', 'two', 'three']
print(df)
输出:
one two three
0 a 1.0 4.0
1 b 2.0 5.0
2 c 3.0 6.0
在上面的示例中,我们使用columns属性将列标签从’A’、’B’、’C’更改为’one’、’two’、’three’。
总结
在本文中,我们介绍了如何通过将一个或多个Series对象转换为DataFrame对象。我们也讨论了如何修改DataFrame的列标签和列数据类型等。通过掌握这些技巧,你能够更好地处理Pandas中的数据集。