所以基本上我是Python的新手,有些事情我做不到。我正在从CSV导入数据,我需要data_2d看起来像这样:
data_2d = [ [30, 15, 0, 15, 0, 0, 0],
[32, 10, 0,10, 3, 5, 0],
[5, 9, 0, 25, 10, 8, 3],
[22, 10, 0 ,17, 5, 6, 0],
[7, 15, 0, 30, 3, 5, 0]]
相反,使用我当前的代码,我得到了:
[['30' '15' '0' '15' '0' '0' '0']
['32' '10' '0' '10' '3' '5' '0']
['5' '9' '0' '25' '10' '8' '3']
['22' '10' '0' '17' '5' '6' '0']
['7' '15' '0' '30' '3' '5' '0']]
我的代码在这里:
data_2d = [ [30, 15, 0, 15, 0, 0, 0],
[32, 10, 0,10, 3, 5, 0],
[5, 9, 0, 25, 10, 8, 3],
[22, 10, 0 ,17, 5, 6, 0],
[7, 15, 0, 30, 3, 5, 0]]
data_2d = []
with open('file.csv', newline='\n') as f:
reader = csv.reader(f, delimiter=';')
for row in reader:
data_2d.append(row)
data_array = np.array(data_2d)
data_array = np.delete(data_array, (0), axis=0)
data_array = np.delete(data_array, (0), axis=1)
print("data_array")
print(data_array)
当前CSV文件如下所示:
Time_Activity;SITTING;STANDING;LAYING;WALKING;WALKING_DOWNSTAIRS;WALKING_UPSTAIRS;RUNNING
8;30;15;0;15;0;0;0
9;32;10;0;10;3;5;0
10;5;9;0;25;10;8;3
11;22;10;0;17;5;6;0
12;7;15;0;30;3;5;0
答案 0 :(得分:3)
csv文件以字符串形式读取。您可以在追加时将行从字符串转换为整数。可以使用map
函数来完成。
代码:
data_2d.append(list(map(int,row)))
答案 1 :(得分:1)
要立即解决,请使用astype
方法将字符串数组转换为int
:
data_array = data_array.astype(int)
此外,np.delete
效率低下,不建议使用;尽可能使用切片。您可以通过以下两种方法完全避免Python级别的循环:-
numpy
使用NumPy,您可以利用np.genfromtxt
:
arr = np.genfromtxt('file.csv', delimiter=';', skip_header=1)[:, 1:]
pandas
或者,通过熊猫,您可以使用pd.read_csv
:
arr = pd.read_csv('file.csv', sep=';').iloc[:, 1:].values
print(arr)
# array([[30, 15, 0, 15, 0, 0, 0],
# [32, 10, 0, 10, 3, 5, 0],
# [ 5, 9, 0, 25, 10, 8, 3],
# [22, 10, 0, 17, 5, 6, 0],
# [ 7, 15, 0, 30, 3, 5, 0]], dtype=int64)
答案 2 :(得分:1)
您处在正确的轨道上。两件事可以帮助您实现目标并简化代码。
适用于您的输入的示例代码:
data_2d = []
with open('file.csv', newline='\n') as f:
reader = csv.reader(f, delimiter=';')
next(reader) # this will skip that header
for row in reader:
data_2d.append([int(x) for x in row]) #this just means take each string and make it an int before appending.
结果:
[[8, 30, 15, 0, 15, 0, 0, 0],
[9, 32, 10, 0, 10, 3, 5, 0],
[10, 5, 9, 0, 25, 10, 8, 3],
[11, 22, 10, 0, 17, 5, 6, 0],
[12, 7, 15, 0, 30, 3, 5, 0]]
一些有用的链接,解释了两个添加项:
np.seterr()
https://evanhahn.com/python-skip-header-csv-reader/