我把熊猫DF变成dict做错了什么?



我有一个csv文件,看起来像

AccountExternalID    Customer
1                    RogerInc
2                    FredLLC

我要把它变成一个Pandas DF,我想把它变成一个看起来像

的字典{' roger ': 1, 'FredLLC': 2}

这是我尝试过的;

def build_custid_dict(csv_path: str=None) -> dict[str]:
csv_path = r'\pathCustomerIDs.csv'
df = pd.read_csv(csv_path)
# Strip whitespace
df[df.columns] = df.apply(lambda x: x.str.strip())
df_dict = df.to_dict('list')
return df_dict

示例

data = {'AccountExternalID': {0: 1, 1: 2}, 'Customer': {0: 'RogerInc', 1: 'FredLLC'}}
df = pd.DataFrame(data)
输出(df):
AccountExternalID   Customer
0   1                   RogerInc
1   2                   FredLLC

在函数中使用以下代码:

dict(df.iloc[:, [1, 0]].values)

结果:

{'RogerInc': 1, 'FredLLC': 2}

to_dict方法将把列标头映射到列数据。你不会想要这样的结果的。

相反,你可以这样做:

ids = df['AccountExternalID'].values
customers = df['Customer'].values
df_dict = {customer:id for customer, id in zip(customers, ids)}

试试这个,你可以选择数据框的一列作为键,另一列作为dict的值。

def build_custid_dict(csv_path: str=None) -> dict[str]:
csv_path = r'\pathCustomerIDs.csv'
df = pd.read_csv(csv_path)
# Strip whitespace
df['AccountExternalID'].str.strip()
df['Customer'].str.strip()
df = df.set_index('AccountExternalID') 
df_dict = df.to_dict('Customer')
dict((v, k) for k, v in df_dict.items()) #reversing the keys and values
return df_dict

也可参考此堆栈溢出问题

您也可以在序列上使用to_dict方法,例如

df.set_index('Customer').AccountExternalID.to_dict()

相关内容

  • 没有找到相关文章

最新更新