是否还可以将整行的内容返回到列表?例如
cluster load_date budget actual fixed_price
A 1/1/2014 1000 4000 Y
A 2/1/2014 12000 10000 Y
A 3/1/2014 36000 2000 Y
B 4/1/2014 15000 10000 N
B 4/1/2014 12000 11500 N
B 4/1/2014 90000 11000 N
C 7/1/2014 22000 18000 N
C 8/1/2014 30000 28960 N
C 9/1/2014 53000 51200 N
#1 楼
拔出它们时,Pandas DataFrame列是Pandas系列,然后可以调用x.tolist()
将其转换为Python列表。另外,您也可以使用list(x)
进行转换。 import pandas as pd
data_dict = {'one': pd.Series([1, 2, 3], index=['a', 'b', 'c']),
'two': pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}
df = pd.DataFrame(data_dict)
print(f"DataFrame:\n{df}\n")
print(f"column types:\n{df.dtypes}")
col_one_list = df['one'].tolist()
col_one_arr = df['one'].to_numpy()
print(f"\ncol_one_list:\n{col_one_list}\ntype:{type(col_one_list)}")
print(f"\ncol_one_arr:\n{col_one_arr}\ntype:{type(col_one_arr)}")
输出:
DataFrame:
one two
a 1.0 1
b 2.0 2
c 3.0 3
d NaN 4
column types:
one float64
two int64
dtype: object
col_one_list:
[1.0, 2.0, 3.0, nan]
type:<class 'list'>
col_one_arr:
[ 1. 2. 3. nan]
type:<class 'numpy.ndarray'>
评论
我无法理解文档的样式,因为它几乎总是直接的语法,在这里我需要语法和示例。例如。语法是创建一个集合:使用set关键字和一个列表:伴随的示例:alist = df.cluster.tolist()。在用这种方式写熊猫之前,我将一直在努力。它到了那里,现在有一些示例,但不是每种方法都适用。
–yoshiserry
2014年3月12日下午4:02
谢谢@本,很好的答案!您能告诉我有关Dataframe方法的信息吗,我以前从未见过……好像您正在将字典转换为df一样? df = DataFrame(d)?
–yoshiserry
2014年12月12日4:14
制作数据框的默认方法之一是向其传递具有匹配键的字典列表。
–本
2014年3月12日下午4:15
@yoshiserry现在,大多数常用功能的语法和参数列表下方均在其文档中提供了示例用法。您还可以看到15分钟到达熊猫的更多入门级示例。
–cs95
19年6月5日在5:55
@Ben我还没有看到您仍然对SO保持活跃,所以我想提一下,我对此答案提交了相当大的修改,所以让我知道您的想法:)
– AMC
20年1月7日在18:21
#2 楼
这将返回一个numpy数组: arr = df["cluster"].to_numpy()
这将返回一个numpy数组唯一值:
unique_arr = df["cluster"].unique()
您也可以使用numpy来获得唯一值,尽管在那里两种方法之间的区别是:
arr = df["cluster"].to_numpy()
unique_arr = np.unique(arr)
评论
两种方法有什么区别?
– Pro Q
20年6月29日在20:36
@ProQ pandas唯一方法与np.unique()不同,因此排序更快。有关更多信息,请参见pandas.pydata.org/pandas-docs/stable/reference/api/…和numpy.org/devdocs/reference/generated/numpy.unique.html。两种方法的文档都非常可靠。
–阿尼鲁斯·班迪(Anirudh Bandi)
20年6月30日,0:07
#3 楼
转换示例:numpy数组->熊猫数据框->来自一个熊猫列的列表
numpy数组
data = np.array([[10,20,30], [20,30,60], [30,60,90]])
将numpy数组转换为熊猫数据框/>将一个熊猫列转换为列表
pdToList = list(dataPd['2'])
评论
为什么要两次显示数组创建代码,好像它是解决方案的重要组成部分一样?实际上,为什么还要创建该数组呢? df = pd.DataFrame(data = [[10,20,30],[20,30,60],[30,60,90]])更简单吗?另外,请注意遵循Python样式约定的变量名和空格。遍历列表作为证明究竟证明了什么?那是清单吗?
– AMC
20年1月7日在18:25
#4 楼
由于这个问题引起了人们的广泛关注,并且有多种方法可以完成您的任务,因此,我提出几种选择。顺便说一句,所有这些都是一线之类的。)操作:
df
cluster load_date budget actual fixed_price
0 A 1/1/2014 1000 4000 Y
1 A 2/1/2014 12000 10000 Y
2 A 3/1/2014 36000 2000 Y
3 B 4/1/2014 15000 10000 N
4 B 4/1/2014 12000 11500 N
5 B 4/1/2014 90000 11000 N
6 C 7/1/2014 22000 18000 N
7 C 8/1/2014 30000 28960 N
8 C 9/1/2014 53000 51200 N
代码:
ser_aggCol (collapse each column to a list)
cluster [A, A, A, B, B, B, C, C, C]
load_date [1/1/2014, 2/1/2014, 3/1/2...
budget [1000, 12000, 36000, 15000...
actual [4000, 10000, 2000, 10000,...
fixed_price [Y, Y, Y, N, N, N, N, N, N]
dtype: object
ser_aggRows (collapse each row to a list)
0 [A, 1/1/2014, 1000, 4000, Y]
1 [A, 2/1/2014, 12000, 10000...
2 [A, 3/1/2014, 36000, 2000, Y]
3 [B, 4/1/2014, 15000, 10000...
4 [B, 4/1/2014, 12000, 11500...
5 [B, 4/1/2014, 90000, 11000...
6 [C, 7/1/2014, 22000, 18000...
7 [C, 8/1/2014, 30000, 28960...
8 [C, 9/1/2014, 53000, 51200...
dtype: object
df_gr (here you get lists for each cluster)
load_date budget actual fixed_price
cluster
A [1/1/2014, 2/1/2014, 3/1/2... [1000, 12000, 36000] [4000, 10000, 2000] [Y, Y, Y]
B [4/1/2014, 4/1/2014, 4/1/2... [15000, 12000, 90000] [10000, 11500, 11000] [N, N, N]
C [7/1/2014, 8/1/2014, 9/1/2... [22000, 30000, 53000] [18000, 28960, 51200] [N, N, N]
a list of separate dataframes for each cluster
df for cluster A
cluster load_date budget actual fixed_price
0 A 1/1/2014 1000 4000 Y
1 A 2/1/2014 12000 10000 Y
2 A 3/1/2014 36000 2000 Y
df for cluster B
cluster load_date budget actual fixed_price
3 B 4/1/2014 15000 10000 N
4 B 4/1/2014 12000 11500 N
5 B 4/1/2014 90000 11000 N
df for cluster C
cluster load_date budget actual fixed_price
6 C 7/1/2014 22000 18000 N
7 C 8/1/2014 30000 28960 N
8 C 9/1/2014 53000 51200 N
just the values of column load_date
0 1/1/2014
1 2/1/2014
2 3/1/2014
3 4/1/2014
4 4/1/2014
5 4/1/2014
6 7/1/2014
7 8/1/2014
8 9/1/2014
Name: load_date, dtype: object
just the values of column number 2
0 1000
1 12000
2 36000
3 15000
4 12000
5 90000
6 22000
7 30000
8 53000
Name: budget, dtype: object
just the values of row number 7
cluster C
load_date 8/1/2014
budget 30000
actual 28960
fixed_price N
Name: 7, dtype: object
============================== JUST FOR COMPLETENESS ==============================
you can convert a series to a list
['C', '8/1/2014', '30000', '28960', 'N']
<class 'list'>
you can convert a dataframe to a nested list
[['A', '1/1/2014', '1000', '4000', 'Y'], ['A', '2/1/2014', '12000', '10000', 'Y'], ['A', '3/1/2014', '36000', '2000', 'Y'], ['B', '4/1/2014', '15000', '10000', 'N'], ['B', '4/1/2014', '12000', '11500', 'N'], ['B', '4/1/2014', '90000', '11000', 'N'], ['C', '7/1/2014', '22000', '18000', 'N'], ['C', '8/1/2014', '30000', '28960', 'N'], ['C', '9/1/2014', '53000', '51200', 'N']]
<class 'list'>
the content of a dataframe can be accessed as a numpy.ndarray
[['A' '1/1/2014' '1000' '4000' 'Y']
['A' '2/1/2014' '12000' '10000' 'Y']
['A' '3/1/2014' '36000' '2000' 'Y']
['B' '4/1/2014' '15000' '10000' 'N']
['B' '4/1/2014' '12000' '11500' 'N']
['B' '4/1/2014' '90000' '11000' 'N']
['C' '7/1/2014' '22000' '18000' 'N']
['C' '8/1/2014' '30000' '28960' 'N']
['C' '9/1/2014' '53000' '51200' 'N']]
<class 'numpy.ndarray'>
cs95指出,其他方法应优先于熊猫来自pandas 0.24版的
.values
属性,请参见此处。我在这里使用它,因为大多数人(到2019年)仍将具有较旧的版本,该版本不支持新的建议。您可以使用print(pd.__version__)
检查您的版本#5 楼
如果您的列只有一个值,则类似pd.series.tolist()
的内容将产生错误。为确保它适用于所有情况,请使用以下代码:(
df
.filter(['column_name'])
.values
.reshape(1, -1)
.ravel()
.tolist()
)
#6 楼
假设读取Excel工作表后数据框的名称为df
,获取一个空列表(例如dataList
),逐行遍历数据框并追加到空列表中,例如- > 或者,
dataList = [] #empty list
for index, row in df.iterrows():
mylist = [row.cluster, row.load_date, row.budget, row.actual, row.fixed_price]
dataList.append(mylist)
不,如果打印
dataList
,则会在dataList
中得到每一行作为列表。评论
变量和函数名称应遵循lower_case_with_underscores样式。相对于现有解决方案,该解决方案有什么优势?另外,我真的不鼓励在Series和DataFrame上使用属性样式的访问。
– AMC
20年1月7日,18:45
#7 楼
amount = list()
for col in df.columns:
val = list(df[col])
for v in val:
amount.append(v)
评论
熊猫数据框列是拔出的熊猫系列,然后可以调用.tolist()将其转换为python列表从v0.24开始,.values将不再是访问基础numpy数组的首选方法。查看此答案。
重要说明:将Pandas系列转换为list或NumPy数组通常是不必要的,并且几乎可以肯定是在OP中。
同样,对于这样一个琐碎的问题,也无需阅读过长的答案。 df.to_numpy()。tolist()在大多数情况下都可以。
只需使用list(x)进行类型转换