读取多个txt文件并将它们保存到一个numpy数组中:如何连接numpy数组

时间:2017-07-05 16:34:35

标签: python arrays numpy concatenation

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))

3 个答案:

答案 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)