我有一个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()