use*_*097 4 python csv types dataframe pandas
我有一个从 SQL 数据库导入的大型 Pandas 数据框。整个过程需要几个小时。当我处理数据时,数据帧不可避免地会发生变化,我经常想返回“已知的良好数据集”并重新运行各种函数。我不想从数据库导入数据,而是想将分析过程中各个点的数据保存为 CSV 文件,然后可以根据需要使用该文件恢复数据;CSV 是首选格式,因为出于某种原因,我在腌制数据帧方面运气不佳。只需使用 pd.read_csv() 导入 CSV 数据即可更改列的数据类型。因此,我想创建一个 dtypes 字典,可用于在将 CSV 导入回数据帧时恢复数据类型。
例如,一个简单的数据框可以定义如下:
df = pd.DataFrame({'A':[1,2,3,4,5],'B':['a','b','c','d','e'],'C':[1.2,3.4,5.6,7.8,9.0]},index=[0,2,4,6,8])
Run Code Online (Sandbox Code Playgroud)
看起来像:
A B C
0 1 a 1.2
2 2 b 3.4
4 3 c 5.6
6 4 d 7.8
8 5 e 9.0
Run Code Online (Sandbox Code Playgroud)
可以使用以下命令创建数据类型字典:
dtypesDict = df.dtypes.to_dict()
Run Code Online (Sandbox Code Playgroud)
其产生:
{'B': dtype('O'), 'C': dtype('float64'), 'A': dtype('int64')}
Run Code Online (Sandbox Code Playgroud)
如果我尝试使用此输出以硬代码定义字典,以便可以使用它来设置使用导入的列的数据类型pd.read_csv()
,则会失败,如下所示:
dtypesDict = {'B': dtype('O'), 'C': dtype('float64'), 'A': dtype('int64')}
NameError: name 'dtype' is not defined
Run Code Online (Sandbox Code Playgroud)
然而,将字典定义为:
dtypesDict = {'B': 'O', 'C': 'float64', 'A': 'int64'}
Run Code Online (Sandbox Code Playgroud)
允许毫无问题地导入 CSV 文件。
我认为字典理解是可行的方法,但我无法做到这一点:
dtypesDict = {k:bit_in_brackets_of_v for k,v in df.dtypes.to_dict().items()}
Run Code Online (Sandbox Code Playgroud)
如何自动生成正确格式的字典,该字典可以使用 cut 和简单的剪切粘贴过程以硬编码方式定义,并允许正确设置从 CSV 导入的列的数据类型?
您可以使用dict
,zip
来获取数据类型名称dtype.name
dict(zip(list(df),[df[x].dtype.name for x in df]))
Out[6]: {'A': 'int64', 'B': 'object', 'C': 'float64'}
Run Code Online (Sandbox Code Playgroud)