a)这是我的尝试。它有效,但我想知道如果没有其他条件和索引,我是否可以做到 - 更多pythonic方式。
sensor_files = ['file1.csv', 'file2.csv']
for idx,sensor_file in enumerate(sensor_files):
with open(file, 'rb') as f:
clean_lines = (line.replace(b';',b',')
sensors = np.genfromtxt(clean_lines, dtype=int, delimiter=',')
if idx == 0:
acc_measurements = sensors
else:
acc_measurements = np.concatenate((acc_measurements, sensors))
答案 0 :(得分:2)
列表附加版本:
alist = []
for sensor_file in sensor_files:
with open(sensor_file, 'rb') as f:
clean_lines = (line.replace(b';',b',')
sensors = np.genfromtxt(clean_lines, dtype=int, delimiter=',')
alist.append(sensors)
acc_measurements = np.concatenate(alist)
genfromtxt
做了类似的事情。它迭代文件行,解析每个文件并将其附加到列表中。然后在最后它将列表列表转换为具有正确dtype的数组。
每个concatenate
创建一个新数组,从参数中复制数据。 List append操作'就地'只添加指向新source
的指针。列表专为快速追加而设计。
答案 1 :(得分:1)
您可以创建一个包含所需列的空数组,然后循环使用numpy.vstack。
像:
arr = numpy.array([[]]*5) ## real length of sensors
for idx,sensor_file in enumerate(sensor_files):
....
arr = numpy.vstack((arr, sensors))
答案 2 :(得分:1)
使用熊猫的整洁解决方案
import pandas as pd
df1 = pd.read_csv("file1.csv")
df2 = pd.read_csv("file2.csv")
df_concatenated = df1.append(df2)