如何让 df.to_csv() 停止在输出文件中将行分成多行?

Peg*_*rus 5 python dataframe pandas

我有一个 pandas DataFrame,其中包含一个长 np 数组作为元素之一。当我使用该函数将其写入 csv 时,to_csv()输出文件中的每一行都会分为多行。有没有办法抑制这种行为并让 DataFrame 的每一行只占用输出 csv 中的一行?

## Create Example Data Frame
fruit_veg = pd.DataFrame({"category":["fruit","vegetable"],
                          "items":[np.array(["apple","pear","banana","grapefruit","watermelon",
                                             "lychee","dragonfruit","mango"]),
                                   np.array(["asparags","cabbage","zuchinni","broccoli",
                                             "cauliflower","carrot","celery"])]})

## Output to csv
fruit_veg.to_csv(r'/my/file/path/EXAMPLE_PROBLEM.csv')
Run Code Online (Sandbox Code Playgroud)

生成的 csv 文件(实际上)如下所示:

,category,items
0,fruit,"['apple' 'pear' 'banana' 'grapefruit' 'watermelon' 'lychee' 'dragonfruit'
 'mango']"
1,vegetable,"['asparags' 'cabbage' 'zuchinni' 'broccoli' 'cauliflower' 'carrot'
 'celery']"
Run Code Online (Sandbox Code Playgroud)

希望它看起来像这样:

,category,items
0,fruit,"['apple' 'pear' 'banana' 'grapefruit' 'watermelon' 'lychee' 'dragonfruit' 'mango']"
1,vegetable,"['asparags' 'cabbage' 'zuchinni' 'broccoli' 'cauliflower' 'carrot' 'celery']"
Run Code Online (Sandbox Code Playgroud)

tdy*_*tdy 5

总长DR

linewidth通过在写入之前增加 numpy 来防止换行to_csv()

np.set_printoptions(linewidth=100000)
fruit_veg.to_csv('fruit_veg.csv')
Run Code Online (Sandbox Code Playgroud)

解释

to_csv()写入数组的__str__()输出,默认情况下每 75 个字符包含一个换行符

线宽:int,可选

用于插入换行符的每行字符数(默认 75)。

fruit_veg.loc[0, 'items'].__str__()

# "['apple' 'pear' 'banana' 'grapefruit' 'watermelon' 'lychee' 'dragonfruit'\n 'mango']"
Run Code Online (Sandbox Code Playgroud)

因此增加linewidthwithnp.set_printoptions()来防止 75 个字符的换行:

np.set_printoptions(linewidth=100000)
fruit_veg.loc[0, 'items'].__str__()

# "['apple' 'pear' 'banana' 'grapefruit' 'watermelon' 'lychee' 'dragonfruit' 'mango']"
Run Code Online (Sandbox Code Playgroud)

csv 将根据需要输出:

fruit_veg.to_csv('fruit_veg.csv')

# ,category,items
# 0,fruit,['apple' 'pear' 'banana' 'grapefruit' 'watermelon' 'lychee' 'dragonfruit' 'mango']
# 1,vegetable,['asparags' 'cabbage' 'zuchinni' 'broccoli' 'cauliflower' 'carrot' 'celery']
Run Code Online (Sandbox Code Playgroud)

  • 达格纳比特!我希望能在这个问题上找到自己的最佳答案。不过,当你看到它时,你必须认出它。赚得好。这正是我所反对的。 (2认同)