我对Pandas还有另一个问题,我永远不会在这个图书馆里做我的Pandas。
首先,我认为zip()
应该是这样处理列表的:
import numpy as np
import pandas as pd
a = [1,2]
b = [3,4]
print(type(a))
print(type(b))
vv = zip([1,2], [3,4])
for i, v in enumerate(vv):
print(f"{i}: {v}")
输出:
<class 'list'>
<class 'list'>
0: (1, 3)
1: (2, 4)
问题。我创建了一个 Dataframe ,其中包含列表元素(在实际代码中,列表来自分组操作,我不能更改它们,基本上它们包含了 Dataframe 中按列分组的所有值)。
# create dataframe
values = [{'x': list( (1, 2, 3) ), 'y': list( (4, 5, 6))}]
df = pd.DataFrame.from_dict(values)
print(df)
x y
0 [1, 2, 3] [4, 5, 6]
但是,列表现在为pd.Series
:
print(type(df["x"]))
<class 'pandas.core.series.Series'>
如果我这样做:
col1 = df["x"].tolist()
col2 = df["y"].tolist()
print(f"col1 is of type {type(col1)}, with length {len(col1)}, first el is {col1[0]} of type {type(col1[0])}")
col1 is of type <class 'list'>, width length 1, first el is [1, 2, 3] of type <class 'list'>
基本上,tolist()
返回了list的list(为什么?):
事实上:
print("ZIP AND ITER")
vv = zip(col1, col2)
for v in zip(col1, col2):
print(v)
ZIP AND ITER
([1, 2, 3], [4, 5, 6])
我只需要计算这个:
# this fails because x (y) is a list
# df['s'] = [np.sqrt(x**2 + y**2) for x, y in zip(df["x"], df["y"])]
我可以添加df["x"][0]
,这看起来不是很优雅。
问题:当x
和y
位于两列df["x"]
和df["y"]
中时,我应该如何计算sqrt(x^2 + y^2)
3条答案
按热度按时间vxf3dgd41#
这应计算
df['s']
sg3maiej2#
基本上,tolist()返回了list的list(为什么?):
因为你的 Dataframe 只有一行,两列,并且两列都包含
list
作为它的值,所以,返回该列作为它的值的list
,它将返回一个list
,其中包含1个元素(值的列表)。我认为您希望创建如下的 Dataframe :
dtcbnfnu3#
打印(df)#产量
计算sqrt(x^2 + y^2)的一个优雅的解决方案可以通过如下转换 Dataframe 来完成:
这将生成以下输出
现在计算平方(x^2 + y^2)
这产生: