python - 如何将 Pandas 数据框导出到文件,以便可以使用 Pandas 和 pyspark 打开它?

标签 python pandas dataframe pyspark

我已经阅读了 pandas.read_csvpyspark.sql.DataFrameReader.csv 文档,PySpark 方面似乎没有 doublequote 参数,因此使用转义字符和 pandas 双引号字符对字段内的引号字符进行转义,以表明 qoute 字符在字段内。

这可以通过在 pandas.to_csv 中设置参数 doubleqoute=Falseescapechar='\\' 并设置参数 来解决pyspark.sql.DataFrameReader.csv 中的 >multiLine=True

但是,在我将这些参数设置为 pandas.to_csv 之后,然后尝试使用相同的参数来访问 pandas.read_csv。我收到错误消息,显示此行有 4 个字段,而本应有 3 个字段。

1242,"I see him, I know him \",an_username
1243,"I think I'm good now",another_username

我认为发生错误的原因是因为第一行的第二个字段包含 \ 作为最后一个字符,而 pandas 将其读取为转义字符 " 并认为第二个字段还没有结束。除了删除 \ 字符之外,还有什么办法可以解决这个问题吗?

这是获取错误的示例脚本

import pandas as pd
from io import StringIO

f = StringIO()
pd.DataFrame({'class':['y','y','n'],
              'text':['I am fine','I saw him, I knew him \\','I think, I am good now'],
              'value':['username','an_username','another_username']})\
  .to_csv(f,doublequote=False,escapechar='\\',index=False)
f.seek(0)
print(f.read())
f.seek(0)
pd.read_csv(f,doublequote=False,escapechar='\\')

最佳答案

我也试过,但没有遇到这个问题。请检查以下尝试过的代码

import pandas as pd

data = pd.read_csv('c.csv')
print(data)

df = pd.DataFrame(data)
print(df)
df.to_csv('d.csv', doublequote=False)

data_1 = pd.read_csv('d.csv')
print(data_1)

以上代码的输出为:

Empty DataFrame
Columns: [1242, I see him, I know him, True]
Index: []
Empty DataFrame
Columns: [1242, I see him, I know him, True]
Index: []
Empty DataFrame
Columns: [Unnamed: 0, 1242, I see him, I know him, True]
Index: []

希望这对您有所帮助。

关于python - 如何将 Pandas 数据框导出到文件,以便可以使用 Pandas 和 pyspark 打开它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56625179/

相关文章:

python - Matplotlib 粗动画,显示轨迹

python - 如何在Python中从字符串中提取表情符号和标志?

python - 在 Pandas 中重新格式化数据框

python - 如何用我自己的方法和函数扩展 pandas 的 Dataframe 类

Python Pandas : classifying values in column and making a new column

Python 多处理似乎比常规执行慢

python - Python Gtk3 中日期时间和小数的 Gobject 类型

python - Pandas 添加所有值为零的行

Python 多索引 : Finding cordinates with level 2 index, DataFrame

pandas - 将 pandas 数据框中的多列转换为时间戳 - 四舍五入到最近的 15 分钟间隔