我没有注意到,pandas的“ to_csv”会自动转换只有字母数字字符串要浮动的列。
我正在Jupyter笔记本中创建一个数据框,并创建一个充满值'1'的列['A']。因此,我有一个由字符串“ 1”的列组成的数据框。
当我使用“ to_csv”将数据框转换为csv文件时。输出的csv文件是一整列整数1。
您可能会建议我在jupyter中重新加载时将列转换为字符串,但是这行不通,因为我事先不知道由于这种行为可能会惩罚哪些列。
有没有办法避免这种奇怪的情况。
答案 0 :(得分:2)
一种方法是分别存储您的类型并将其与数据一起加载:
df = pd.DataFrame({0: ['1', '1', '1'],
1: [2, 3, 4]})
df.dtypes.to_frame('types').to_csv('types.csv')
df.to_csv('file.csv', index=False)
df_types = pd.read_csv('types.csv')['types']
df = pd.read_csv('file.csv', dtype=df_types.to_dict())
print(df.dtypes)
# 0 object
# 1 int64
# dtype: object
您可能希望考虑使用Pickle来确保您的数据帧保持不变:
df.to_pickle('file.pkl')
df = pd.read_pickle('file.pkl')
print(df.dtypes)
# 0 object
# 1 int64
# dtype: object
答案 1 :(得分:0)
您可以在quoting
中设置to_csv
参数,看看这个例子:
a = [['a', '1.2', '4.2'], ['b', '70', '0.03'], ['x', '5', '0']]
df = pd.DataFrame(a)
df.to_csv('test.csv', sep='\t', quoting=csv.QUOTE_NONNUMERIC)
创建的csv文件为:
"" 0 1 2
0 "a" "1.2" "4.2"
1 "b" "70" "0.03"
2 "x" "5" "0"
您还可以使用quotechar
参数设置引号字符,例如quotechar="'"
将产生以下输出:
'' 0 1 2
0 'a' '1.2' '4.2'
1 'b' '70' '0.03'
2 'x' '5' '0'