簡體   English   中英

如何讓 df.to_csv() 停止在 output 文件中的多行中斷我的行?

[英]How to I get df.to_csv() to stop breaking my row over multiple lines in the output file?

我有一個 pandas DataFrame ,其中包含一個長 np 數組作為元素之一。 當我使用to_csv() function 將其寫入 csv 時,output 文件中的每一行都被分成多行。 有沒有辦法抑制這種行為並使 DataFrame 的每一行只占用我的 output 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')

生成的 csv 文件(實際上)如下所示:

,category,items
0,fruit,"['apple' 'pear' 'banana' 'grapefruit' 'watermelon' 'lychee' 'dragonfruit'
 'mango']"
1,vegetable,"['asparags' 'cabbage' 'zuchinni' 'broccoli' 'cauliflower' 'carrot'
 'celery']"

希望它看起來像這樣:

,category,items
0,fruit,"['apple' 'pear' 'banana' 'grapefruit' 'watermelon' 'lychee' 'dragonfruit' 'mango']"
1,vegetable,"['asparags' 'cabbage' 'zuchinni' 'broccoli' 'cauliflower' 'carrot' 'celery']"

我不確定這是最好的答案。 如果有人可以通過將參數傳遞給to_csv()而不是進入並更改存儲在“項目”列中的數據類型來解決該問題,我會將互聯網積分獎勵給他們。

我的解決方案

似乎df.to_csv() function沒有包裝 output 文件中的行,當項目列中的集合是一個list而不是現在的np.ndarray

## Recast the elements of the "items" column to lists
fruit_veg["items"] = fruit_veg["items"].apply(lambda x: x.tolist())

## Output to csv
fruit_veg.to_csv(r'/my/file/path/EXAMPLE_PROBLEM.csv')

output 則變為:

,category,items
0,fruit,"['apple', 'pear', 'banana', 'grapefruit', 'watermelon', 'lychee', 'dragonfruit', 'mango']"
1,vegetable,"['asparags', 'cabbage', 'zuchinni', 'broccoli', 'cauliflower', 'carrot', 'celery']"

TLDR

通過在寫入to_csv()之前增加 numpy 的linewidth來防止換行:

np.set_printoptions(linewidth=100000)
fruit_veg.to_csv('fruit_veg.csv')

解釋

to_csv()寫入數組的__str__() output , 默認情況下每 75 個字符包含一個換行符

線寬: int,可選

用於插入換行符的每行字符數(默認為 75)。

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

# "['apple' 'pear' 'banana' 'grapefruit' 'watermelon' 'lychee' 'dragonfruit'\n 'mango']"

因此,使用np.set_printoptions()增加行linewidth以防止 75 個字符的換行符:

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

# "['apple' 'pear' 'banana' 'grapefruit' 'watermelon' 'lychee' 'dragonfruit' 'mango']"

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']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM