DataFrame.lookup 需要具有最新版本 Pandas 的唯一索引和列
DataFrame.lookup requires unique index and columns with a recent version of Pandas
我正在使用 python3.7,但我遇到了 pandas 最新版本的问题。
这是我的代码。
import pandas as pd
import numpy as np
data = {'col_1':[9087.6000, 9135.8000, np.nan, 9102.1000],
'col_2':[0.1648, 0.1649, '', 5.3379],
'col_nan':[np.nan, np.nan, np.nan, np.nan],
'col_name':['col_nan', 'col_1', 'col_2', 'col_nan']
}
df = pd.DataFrame(data, index=[101, 102, 102, 104])
col_lookup = 'results'
col_result = 'col_name'
df[col_lookup] = df.lookup(df.index, df[col_result])
代码在 pandas 版本 1.0.3 上运行良好,但是
当我尝试使用 1.1.1 版时,出现以下错误:
"ValueError: DataFrame.lookup requires unique index and columns"
数据框确实包含索引“102”的重复项。
由于各种原因,我必须使用 pandas 的 1.1.1 版本。是否有使用“查找”命令的解决方案来支持此版本 pandas 的索引复制?
在此先感谢您的帮助。
放置一个唯一索引然后恢复旧索引...
import pandas as pd
import numpy as np
data = {'col_1':[9087.6000, 9135.8000, np.nan, 9102.1000],
'col_2':[0.1648, 0.1649, '', 5.3379],
'col_nan':[np.nan, np.nan, np.nan, np.nan],
'col_name':['col_nan', 'col_1', 'col_2', 'col_nan']
}
df = pd.DataFrame(data, index=[101, 102, 102, 104])
col_lookup = 'results'
col_result = 'col_name'
df.reset_index(inplace=True)
df[col_lookup] = df.lookup(df.index, df[col_result])
df = df.set_index(df["index"]).drop(columns="index")
Non-unique 索引是一个错误:Github link
pandas 1.1.1 中的“查找”方法不允许您将 non-unique 索引作为输入参数传递。
以下代码已添加到“frame.py”中的“查找”方法的开头,对我来说是在(第 3836 行):
C:\Users\Sajad\AppData\Local\Programs\Python\Python38\Lib\site-packages\pandas\core\frame.py
if not (self.index.is_unique and self.columns.is_unique):
# GH#33041
raise ValueError("DataFrame.lookup requires unique index and columns")
但是,如果此错误处理程序不存在,此方法中的以下过程将以 for 循环结束。用这个 built-in for 循环替换最后一行会得到与以前的 pandas 版本相同的结果。
result = np.empty(len(df.index), dtype="O")
for i, (r, c) in enumerate(zip(df.index, df[col_result])):
result[i] = df._get_value(r, c)
df[col_lookup] = result
我正在使用 python3.7,但我遇到了 pandas 最新版本的问题。 这是我的代码。
import pandas as pd
import numpy as np
data = {'col_1':[9087.6000, 9135.8000, np.nan, 9102.1000],
'col_2':[0.1648, 0.1649, '', 5.3379],
'col_nan':[np.nan, np.nan, np.nan, np.nan],
'col_name':['col_nan', 'col_1', 'col_2', 'col_nan']
}
df = pd.DataFrame(data, index=[101, 102, 102, 104])
col_lookup = 'results'
col_result = 'col_name'
df[col_lookup] = df.lookup(df.index, df[col_result])
代码在 pandas 版本 1.0.3 上运行良好,但是 当我尝试使用 1.1.1 版时,出现以下错误:
"ValueError: DataFrame.lookup requires unique index and columns"
数据框确实包含索引“102”的重复项。
由于各种原因,我必须使用 pandas 的 1.1.1 版本。是否有使用“查找”命令的解决方案来支持此版本 pandas 的索引复制?
在此先感谢您的帮助。
放置一个唯一索引然后恢复旧索引...
import pandas as pd
import numpy as np
data = {'col_1':[9087.6000, 9135.8000, np.nan, 9102.1000],
'col_2':[0.1648, 0.1649, '', 5.3379],
'col_nan':[np.nan, np.nan, np.nan, np.nan],
'col_name':['col_nan', 'col_1', 'col_2', 'col_nan']
}
df = pd.DataFrame(data, index=[101, 102, 102, 104])
col_lookup = 'results'
col_result = 'col_name'
df.reset_index(inplace=True)
df[col_lookup] = df.lookup(df.index, df[col_result])
df = df.set_index(df["index"]).drop(columns="index")
Non-unique 索引是一个错误:Github link
pandas 1.1.1 中的“查找”方法不允许您将 non-unique 索引作为输入参数传递。 以下代码已添加到“frame.py”中的“查找”方法的开头,对我来说是在(第 3836 行):
C:\Users\Sajad\AppData\Local\Programs\Python\Python38\Lib\site-packages\pandas\core\frame.py
if not (self.index.is_unique and self.columns.is_unique):
# GH#33041
raise ValueError("DataFrame.lookup requires unique index and columns")
但是,如果此错误处理程序不存在,此方法中的以下过程将以 for 循环结束。用这个 built-in for 循环替换最后一行会得到与以前的 pandas 版本相同的结果。
result = np.empty(len(df.index), dtype="O")
for i, (r, c) in enumerate(zip(df.index, df[col_result])):
result[i] = df._get_value(r, c)
df[col_lookup] = result