如何在Python中创建pandas数据框架

199 阅读8分钟

Pandas数据框架是Python中处理表格数据的主要数据结构。在这篇文章中,我们将讨论使用pandas模块在Python中创建一个数据框架的不同方法。

在Python中创建一个空的数据框架

要创建一个空的数据框架,你可以使用DataFrame() 函数。当执行时没有任何输入参数,DataFrame() 函数将返回一个没有任何列或行的空数据框架。你可以在下面的例子中观察到这一点。

import pandas as pd
myDf=pd.DataFrame()
print(myDf)

输出。

Empty DataFrame
Columns: []
Index: []

要创建一个有指定列名的空数据框架,你可以使用DataFrame() 函数中的列参数。columns 参数将一个列表作为其输入参数,并将列表元素分配给数据框架的列名,如下所示。

import pandas as pd
myDf=pd.DataFrame(columns=["A", "B", "C"])
print(myDf)

输出。

Empty DataFrame
Columns: [A, B, C]
Index: []

在这里,我们已经创建了一个数据框架,列A、B、C,行中没有任何数据。

从Dict创建Pandas数据框架

你可以使用DataFrame() 函数从python字典中创建一个pandas数据框架。为此,你首先需要创建一个字典的列表。之后,你可以将字典列表传递给DataFrame() 函数。执行后,DataFrame() 函数将返回一个新的数据框架,如下例所示。

import pandas as pd
dict1={"A":1,"B":12,"C":14}
dict2={"A":13,"B":17,"C":12}
dict3={"A":2,"B":11,"C":14}
dictList=[dict1,dict2,dict3]
myDf=pd.DataFrame(dictList)
print(myDf)

输出。

    A   B   C
0   1  12  14
1  13  17  12
2   2  11  14

当从字典列表中创建一个数据框架时,字典的键被用作数据框架的列名。如果所有的字典不包含相同的键,那么对应于一个字典的行将在作为键的字典中不存在的列中包含NaN 值。你可以在下面的例子中观察到这一点。

import pandas as pd
dict1={"A":1,"B":12,"C":14}
dict2={"A":13,"B":17,"C":12}
dict3={"A":2,"B":11,"C":14,"D":1117}
dictList=[dict1,dict2,dict3]
myDf=pd.DataFrame(dictList)
print(myDf)

输出。

    A   B   C       D
0   1  12  14     NaN
1  13  17  12     NaN
2   2  11  14  1117.0

在这个例子中,第一行和第二行对应的字典没有把 D 作为它的键。由于这个原因,这些行在D列中包含NaN

在Python中从系列中创建潘达斯数据框架

一个数据框架是由pandas系列对象作为其列组成的。你也可以将一个系列对象的列表传递给DataFrame() 函数来创建一个数据框架,如下所示。

series1 = pd.Series([1,2,3])
series2 = pd.Series([4,12,34])
series3 = pd.Series([22,33,44])
seriesList=[series1,series2,series3]
myDf=pd.DataFrame(seriesList)
print(myDf)

输出。

    0   1   2
0   1   2   3
1   4  12  34
2  22  33  44

正如你所看到的,系列对象的关键标签被转化为数据框架的列。因此,如果作为输入的系列对象有不同的索引标签,结果数据框架的列名将是所有系列对象索引标签的联合。另外,对应于一个系列的数据框架中的行将包含NaN ,在系列中不存在索引标签的列中的值。你可以在下面的例子中观察到这一点。

series1 = pd.Series({"A":1,"B":12,"C":14})
series2 = pd.Series({"A":13,"B":17,"C":12})
series3 = pd.Series({"A":2,"B":11,"C":14,"D":1117})
seriesList=[series1,series2,series3]
myDf=pd.DataFrame(seriesList)
print(myDf)

输出。

      A     B     C       D
0   1.0  12.0  14.0     NaN
1  13.0  17.0  12.0     NaN
2   2.0  11.0  14.0  1117.0

在这里,第一行和第二行对应的系列不以D为其关键。由于这个原因,这些行在D列中包含NaN 的值。

列表到数据框架

你也可以在Python中从一个列表中创建一个数据框架。为此,你可以将列表作为输入参数传递给DataFrame() 函数,如下图所示。

import pandas as pd
list1=[1,2,3]
list2=[3,55,34]
list3=[12,32,45]
myList=[list1,list2,list3]
myDf=pd.DataFrame(myList)
print(myDf)

输出。

    0   1   2
0   1   2   3
1   3  55  34
2  12  32  45

在上面的例子中,你可以看到列名和索引都是自动分配的。你还可以看到,数据框架中的行的长度被当作所有列表的长度。如果有元素数量不相等的列表,那么元素数量较少的行将被填充为NaN ,如下所示。

import pandas as pd
list1=[1,2,3,4,55]
list2=[3,55,34]
list3=[12,32,45,32]
myList=[list1,list2,list3]
myDf=pd.DataFrame(myList)
print(myDf)

输出。

    0   1   2     3     4
0   1   2   3   4.0  55.0
1   3  55  34   NaN   NaN
2  12  32  45  32.0   NaN

这里,数据框架中的列数等于输入列表的最大长度。与较短的列表相对应的行在最右边的列中包含NaN 值。

如果你有一个长度相等的列表,你也可以使用DataFrame() 函数的columns 参数来给数据框架的列命名。为此,你可以向列参数传递一个列名列表,如下例所示。

import pandas as pd
list1=[1,2,3]
list2=[3,55,34]
list3=[12,32,45]
myList=[list1,list2,list3]
myDf=pd.DataFrame(myList,columns=["A", "B", "C"])
print(myDf)

输出。

    A   B   C
0   1   2   3
1   3  55  34
2  12  32  45

在上面的例子中,要确保在"columns"参数中给出的列数应大于最大输入列表的长度。否则,程序将遇到错误。你可以在下面的例子中观察到这一点。

import pandas as pd
list1=[1,2,3]
list2=[3,55,34]
list3=[12,32,45]
myList=[list1,list2,list3]
myDf=pd.DataFrame(myList,columns=["A", "B", "C", "D"])
print(myDf)

输出。

ValueError: 4 columns passed, passed data had 3 columns

在上面的例子中,输入列表的最大长度是3,但是我们向列参数传递了四个值。由于这个原因,程序遇到ValueError异常

在Python中从CSV文件创建数据框架

要从一个csv文件中创建一个pandas数据框架,你可以使用read_csv() 函数。read_csv() 函数将csv文件的文件名作为其输入参数。执行后,它返回一个pandas数据框架,如下图所示。

myDf=pd.read_csv("samplefile.csv")
print(myDf)

输出。

   Class  Roll      Name
0      1    11    Aditya
1      1    12     Chris
2      1    13       Sam
3      2     1      Joel
4      2    22       Tom
5      2    44  Samantha
6      3    33      Tina
7      3    34       Amy

创建一个带有索引的潘达斯数据框架

默认情况下,pandas数据框架的行是使用从0开始的整数进行索引的。然而,我们可以为数据框架中的行创建自定义索引。为此,我们需要向DataFrame() 函数的索引参数传递一个索引名称列表,如下所示。

import pandas as pd
list1=[1,2,3]
list2=[3,55,34]
list3=[12,32,45]
myList=[list1,list2,list3]
myDf=pd.DataFrame(myList,columns=["A", "B", "C"],index=["a","b","c"])
print(myDf)

输出。

    A   B   C
a   1   2   3
b   3  55  34
c  12  32  45

在这个例子中,我们将列表[a, b, c] 传递给了DataFrame() 函数的索引参数。执行后,值a、b和c被分配给数据框架中的行作为其索引。

你也可以在创建数据框架后为数据框架中的行创建索引。为此,你可以将索引列表分配给数据框架的索引属性,如下例所示。

import pandas as pd
list1=[1,2,3]
list2=[3,55,34]
list3=[12,32,45]
myList=[list1,list2,list3]
myDf=pd.DataFrame(myList,columns=["A", "B", "C"])
myDf.index=["a","b","c"]
print(myDf)

输出。

    A   B   C
a   1   2   3
b   3  55  34
c  12  32  45

在这个例子中,我们在创建数据框架后没有将索引列表传递给索引参数,而是将其分配给了数据框架的索引属性。

如果你从csv文件中创建一个数据框架,你可以使用index_col 参数将其中一列指定为索引,如下图所示。

myDf=pd.read_csv("samplefile.csv",index_col="Class")
print(myDf)

输出。

       Roll      Name
Class                
1        11    Aditya
1        12     Chris
1        13       Sam
2         1      Joel
2        22       Tom
2        44  Samantha
3        33      Tina
3        34       Amy

你也可以创建一个多级索引。为此,你需要向index_col 参数传递一个列名列表。

myDf=pd.read_csv("samplefile.csv",index_col=["Class","Roll"])
print(myDf)

输出。

                Name
Class Roll          
1     11      Aditya
      12       Chris
      13         Sam
2     1         Joel
      22         Tom
      44    Samantha
3     33        Tina
      34         Amy

在Python中对潘达斯数据框架进行转置

我们也可以通过转置另一个数据框架来创建一个pandas数据框架。为此,你可以使用T操作符。T操作符,当在一个数据框架上调用时,会返回原始pandas数据框架的转置,如下图所示。

import pandas as pd
list1=[1,2,3]
list2=[3,55,34]
list3=[12,32,45]
myList=[list1,list2,list3]
myDf=pd.DataFrame(myList,columns=["A", "B", "C"])
myDf.index=["a","b","c"]
newDf=myDf.T
print(newDf)

输出。

   a   b   c
A  1   3  12
B  2  55  32
C  3  34  45

在输出中,你可以看到原始数据框架的行变成了新数据框架的列。随后,原数据框架的列成为新数据框架的索引,反之亦然。

在Python中复制一个数据框架

你也可以通过复制一个现有的数据框架来创建一个pandas数据框架。为此,你可以使用copy() 方法。copy() 方法,当在一个数据框架上调用时,返回一个新的数据框架,其数据与原始数据相同,如下图所示。

import pandas as pd
list1=[1,2,3]
list2=[3,55,34]
list3=[12,32,45]
myList=[list1,list2,list3]
myDf=pd.DataFrame(myList,columns=["A", "B", "C"])
myDf.index=["a","b","c"]
newDf=myDf.copy()
print(newDf)

输出。

    A   B   C
a   1   2   3
b   3  55  34
c  12  32  45

结论

在这篇文章中,我们讨论了在Python中创建pandas数据框架的不同方法。