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数据框架的不同方法。