我在 csv 檔案中有以下幾行
[0 1 2 3 4 5],2145004.491585603,5.784000000019773e-05
[0 1 2 3 4 5],4986045.063898375,1.771400000016854e-05
[0 1 2 3 4 5],2185254.9265346257,1.468399999993153e-05
如您所見,第一個條目是整數串列。如何讀取資料,以便最終得到一個串列(或 numpy.array)和 2 個浮點數?我嘗試使用np.genfromtxt,但我不知道如何正確處理生成的位元組。
如果沒有優雅的解決方案,是否有更好的方法將陣列保存在一列中?
uj5u.com熱心網友回復:
我注意到該串列不是實際串列(專案之間沒有逗號),所以這應該有效
In [1]: with open('data.csv') as f:
...: reader = csv.reader(f)
...: data = []
...: for line in reader:
...: lst_of_nums = [int(x) for x in line[0][1:-1].split()]
...: data.append([lst_of_nums, float(line[1]), float(line[2])])
...:
In [2]: data
Out[2]:
[[[0, 1, 2, 3, 4, 5], 2145004.491585603, 5.784000000019773e-05],
[[0, 1, 2, 3, 4, 5], 4986045.063898375, 1.771400000016854e-05],
[[0, 1, 2, 3, 4, 5], 2185254.9265346257, 1.468399999993153e-05]]
如果它是一個有效的串列,你可以做
import csv
from ast import literal_eval
In [1]: with open('data.csv') as f:
...: reader = csv.reader(f)
...: data = []
...: for line in reader:
...: data.append([literal_eval(line[0]), float(line[1]), float(line[2])])
...:
In [2]: data
Out[2]:
[[[0, 1, 2, 3, 4, 5], 2145004.491585603, 5.784000000019773e-05],
[[0, 1, 2, 3, 4, 5], 4986045.063898375, 1.771400000016854e-05],
[[0, 1, 2, 3, 4, 5], 2185254.9265346257, 1.468399999993153e-05]]
uj5u.com熱心網友回復:
你不需要file簡單地嘗試這個技巧。我知道這是 ireelavent 但分享我的閱讀方式。
只需將資料制作為str并讀取即可。
import io
import pandas as pd
csv_data_as_str = '''[0 1 2 3 4 5],2145004.491585603,5.784000000019773e-05
[0 1 2 3 4 5],4986045.063898375,1.771400000016854e-05
[0 1 2 3 4 5],2185254.9265346257,1.468399999993153e-05 '''
df = pd.read_csv(io.StringIO(csv_data_as_str), sep=",",header = None)
print(df)
輸出
0 1 2
0 [0 1 2 3 4 5] 2.145004e 06 0.000058
1 [0 1 2 3 4 5] 4.986045e 06 0.000018
2 [0 1 2 3 4 5] 2.185255e 06 0.000015
uj5u.com熱心網友回復:
如果您有“[0 1 2 3 4 5]”形式的字串,并且有效資料是整數,則:
lv = '[0 1 2 3 4 5]'
mylist = list(map(int, lv[1:-1].split()))
print(mylist)
輸出:
[0, 1, 2, 3, 4, 5]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/520935.html
標籤:Python数组CSV
下一篇:匹配模式并將以下行放入資料結構中
