Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/277.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python pandas to_csv将str列转换为int(或float)_Python_Pandas_Csv - Fatal编程技术网

Python pandas to_csv将str列转换为int(或float)

Python pandas to_csv将str列转换为int(或float),python,pandas,csv,Python,Pandas,Csv,由于没有标题,我注意到pandas“to_csv”会自动转换只有字母数字字符串可浮动的列。 我正在Jupyter笔记本中创建一个数据框,并创建一个列['a'],其中充满值“1”。因此,我有一个由一列字符串“1”组成的数据帧。 当我使用“to_csv”将数据帧转换为csv文件时。输出的csv文件是一列完整的整数1。 您可能会建议我在jupyter中重新加载时将列重新转换为字符串,但是这不起作用,因为我事先不知道哪些列可能会因为这种行为而受到惩罚。 有没有办法避免这种奇怪的情况。一种方法是单独存储您

由于没有标题,我注意到pandas“to_csv”会自动转换只有字母数字字符串可浮动的列。 我正在Jupyter笔记本中创建一个数据框,并创建一个列['a'],其中充满值“1”。因此,我有一个由一列字符串“1”组成的数据帧。 当我使用“to_csv”将数据帧转换为csv文件时。输出的csv文件是一列完整的整数1。 您可能会建议我在jupyter中重新加载时将列重新转换为字符串,但是这不起作用,因为我事先不知道哪些列可能会因为这种行为而受到惩罚。
有没有办法避免这种奇怪的情况。

一种方法是单独存储您的类型,并将其与数据一起加载:

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

您可能希望考虑泡菜以确保您的数据文件被保证不变:

df.to_pickle('file.pkl')
df = pd.read_pickle('file.pkl')

print(df.dtypes)
# 0    object
# 1     int64
# dtype: object

一种方法是单独存储类型并将其与数据一起加载:

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

您可能希望考虑泡菜以确保您的数据文件被保证不变:

df.to_pickle('file.pkl')
df = pd.read_pickle('file.pkl')

print(df.dtypes)
# 0    object
# 1     int64
# dtype: object
您可以将中的quoting参数设置为_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参数设置quote字符,例如quotechar='将产生以下输出:

''  0   1   2
0   'a' '1.2'   '4.2'
1   'b' '70'    '0.03'
2   'x' '5' '0'
您可以将中的quoting参数设置为_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参数设置quote字符,例如quotechar='将产生以下输出:

''  0   1   2
0   'a' '1.2'   '4.2'
1   'b' '70'    '0.03'
2   'x' '5' '0'

您是否有NaN值?数据框是否包含您希望在csv输出中混合数值类型的列,或者您是否尝试将每一列输出为字符串?@JoshFriedlander:在将我的数据框保存为csv之前:我将所有NaN转换为。然而,在csv中重新引入NaN,但这不是问题,因为当我读取文件时,我可以简单地执行fillna,inplace=True。@约翰:我有许多类型的列:int和str。我注意到我的一些str列在这些列中被转换为int,只有字母数字str,你称之为“奇怪的行为”,但是csv文件在字符串、整数、布尔值等之间没有区别。它只是一个文本文件。加载它是差异的来源。如果导出字符串为“Text”的列,它也将存储为Text而不是“Text”,正如“1”与int 1一样存储为1……您是否有NaN值?数据框是否包含您希望在csv输出中混合数字值类型的列,或者您是否尝试将每列输出为字符串?@Josh Friedlander:在将我的数据框保存为csv之前:我将所有NaN转换为。然而,在csv中重新引入NaN,但这不是问题,因为当我读取文件时,我可以简单地执行fillna,inplace=True。@约翰:我有许多类型的列:int和str。我注意到我的一些str列在这些列中被转换为int,只有字母数字str,你称之为“奇怪的行为”,但是csv文件在字符串、整数、布尔值等之间没有区别。它只是一个文本文件。加载它是差异的来源。如果导出字符串为“Text”的列,它也将存储为Text而不是“Text”,就像“1”存储为1一样,就像int 1一样…当列中的所有值都为1时,这是否有效?它对我不起作用..当一列中的所有值都是1时,它起作用吗?这对我不起作用。这个主意不错,但有一些调整。保存列的数据类型时,目标列将保存为“对象”类型。因此,当我用这个数据类型重新加载数据帧时,不幸的是,它不能解决我的问题。所以我找到了一种方法,将concentred列作为str打开,而不仅仅是一个“object”type@mouni93,熊猫中没有str dtype,字符串存储在object dtype列中。重新加载数据帧时,请检查typedf['0'].iat[0],以向自己证明它们是字符串,即使df['0']dtype给出了object。这个主意不错,但需要做一些调整。保存列的数据类型时,目标列将保存为“对象”类型。因此,当我用这个数据类型重新加载数据帧时,不幸的是,它不能解决我的问题。所以我找到了一种方法,将concentred列作为str打开,而不仅仅是一个“object”type@mouni93,熊猫中没有str dtype,字符串存储在object dtype列中。重新加载数据帧时,检查typedf['0'].iat[0],以向自己证明它们是字符串,即使df['0']dtype给出了对象。