我有一个 DataFrame 并试图更改 dtype。我可以这样做:
#Example
ds = ds.astype({'Breite':float,'Hoehe':float,'Tiefe':float,'vol':float,'Anzahl':np.int64},axis = 1)
我想知道是否可以缩短 dict 使其更具可读性,如下所示:
shorter_dict = {('Breite','Hoehe','Tiefe','vol'):float,'Anzahl':np.int64}
ds = ds.astype(shorter_dict,axis=1)
但它希望从元组中获取每个元素的价值。通过搜索,我找到了一个模块:
从 multi_key_dict 导入 multi_key_dict
k[1000, 'kilo', 'k'] = 'kilo (x1000)'
print k[1000] # 将打印 'kilo (x1000)' print k['k'] # 还将打印 'kilo (x1000)'
同样的方法可以更新、删除对象:如果使用一个键更新对象,则可以使用任何其他键访问新值,例如上面的示例: k['kilo'] = 'kilo' print k[1000 ] # 现在将在值更新时打印 'kilo'
我现在的问题是:在 python 中有什么直接做同样的事情吗?
编辑:在这里 stackoverflow.com/a/41075523/14065969 和这里https://stackoverflow.com/a/41075515/14065969提供一些帮助
我这样做了,它奏效了:
#Example
import pandas as pd
import numpy as np
shortdict = {('Breite','Hoehe','Tiefe','vol'):float,('Anzahl',):np.int64}
df = pd.DataFrame({'Breite':10,'Hoehe':20,'Tiefe':30,'vol':100,'Anzahl':400},index = [0])
print (df)
print(df.info(),'\n'*2)
for key,value in shortdict.items():
for inner_key in key:
df = df.astype({inner_key : value})
print (df)
print(df.info())
输出:
Breite Hoehe Tiefe vol Anzahl
0 10 20 30 100 400
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1 entries, 0 to 0
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Breite 1 non-null int64
1 Hoehe 1 non-null int64
2 Tiefe 1 non-null int64
3 vol 1 non-null int64
4 Anzahl 1 non-null int64
dtypes: int64(5)
memory usage: 48.0 bytes
None
Breite Hoehe Tiefe vol Anzahl
0 10.0 20.0 30.0 100.0 400
<class 'pandas.core.frame.DataFrame'>
Int64Index: 1 entries, 0 to 0
Data columns (total 5 columns):
# Column Non-Null Count Dtype
--- ------ -------------- -----
0 Breite 1 non-null float64
1 Hoehe 1 non-null float64
2 Tiefe 1 non-null float64
3 vol 1 non-null float64
4 Anzahl 1 non-null int64
dtypes: float64(4), int64(1)
memory usage: 48.0 bytes
None
[Finished in 0.7s]```