我在將陣列保存到 csv 檔案時遇到了格式化問題,每次運行程式時都會得到不同的結果,有時字串“creditCard”不會顯示在電子表格中,但所有其他詳細資訊都是. 有時確實如此。我的代碼中是否有明顯的東西導致這種片狀?我已附上相關代碼
def start():
dtype = [('Name', (np.str_, 10 )), ('Number of uses', np.int32), ('Card Value', np.float64)]
defaultCardArray = np.array([("creditCard",4,200)],dtype=dtype)
np.savetxt('creditCards.csv', defaultCardArray, delimiter=',', fmt=['%s' , '%d', '%f'],
header='Name,Number of Uses, Card Value', comments='')e here
創建檔案后,我還有以下代碼可以在其中添加每張卡。默認卡在檔案創建時加載良好,但以下卡陣列是我遇到的問題,有代碼要求用戶輸入并且沒有錯誤地保存到變數中,所以我沒有在這里包含
cardArray = np.array([creditCard,itemLimit,cardValueInput]).reshape(1,3)
file = open(r'creditCards.csv', 'at', newline ='')
with file:
write = csv.writer(file)
write.writerows(cardArray)
file.close()
我在 csv 中得到的輸出影像
uj5u.com熱心網友回復:
對于您的代碼,我認為當您創建新cardArray陣列時,您沒有像為初始陣列所做的那樣指定型別,這可能是一個問題。
無論如何,numpy 可能不是在這里使用的最佳庫。
對于這種資料,我會使用熊貓:
import pandas as pd
header = ['Name', 'Number of Uses', 'Card Value']
def start():
# create default dataset
default_card_df = pd.DataFrame(["creditCard",4,200], columns=header)
default_card_df.to_csv('creditCards.csv', sep=",")
def add_card(name, itemLimit, cardValueInput):
# read csv, add new data, save to csv
df = pd.read_csv('creaditCards.csv', sep=",")
new_df = pd.DataFrame([name, itemLimit, cardValueInput], columns=header)
updated_df = pd.concat(df, new_df)
updated_df.to_csv('creditCards.csv', sep=",")
uj5u.com熱心網友回復:
您最初的寫作:
In [281]: np.savetxt('creditCards.csv', defaultCardArray, delimiter=',', fmt=['%
...: s' , '%d', '%f'],
...: header='Name,Number of Uses, Card Value', comments='')
產生:
In [282]: cat creditCards.csv
Name,Number of Uses, Card Value
creditCard,4,200.000000
如果它以附加模式打開,我們可以向該檔案添加更多條目:
In [284]: with open('creditCards.csv','a') as f:
...: np.savetxt(f, defaultCardArray, delimiter=',', fmt=['%s' , '%d', '
...: %f'])
...:
In [285]: cat creditCards.csv
Name,Number of Uses, Card Value
creditCard,4,200.000000
creditCard,4,200.000000
要繼續使用savetxt相同的fmt,您應該使用 original 創建陣列dtype。
.
In [286]: newcards = np.zeros(3,dtype=dtype)
In [287]: newcards
Out[287]:
array([('', 0, 0.), ('', 0, 0.), ('', 0, 0.)],
dtype=[('Name', '<U10'), ('Number of uses', '<i4'), ('Card Value', '<f8')])
In [289]: newcards['Name']='foobar'
In [290]: newcards['Card Value']=np.arange(10,40,10)
In [291]: newcards
Out[291]:
array([('foobar', 0, 10.), ('foobar', 0, 20.), ('foobar', 0, 30.)],
dtype=[('Name', '<U10'), ('Number of uses', '<i4'), ('Card Value', '<f8')])
In [292]: with open('creditCards.csv','a') as f:
...: np.savetxt(f, newcards, delimiter=',', fmt=['%s' , '%d', '%f'])
...:
In [293]: cat creditCards.csv
Name,Number of Uses, Card Value
creditCard,4,200.000000
creditCard,4,200.000000
foobar,0,10.000000
foobar,0,20.000000
foobar,0,30.000000
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/471437.html
