Concat两个阵列在特定条件下?

2024-04-29 22:04:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要连接两个大小不等的阵列:

数组-1:

A = ["year","month","day","hour","minute","second", "a", "b", "c", "d"]
data1 = pd.read_csv('event_5.txt',sep='\t',names=A)
array1=data1[['year', 'month', 'day']]

阵列-2:

B=["station", "phase", "hour", "minute", "second"]
arr_data = pd.read_csv('arrival_5.txt',sep='\t',names=B)
ar_t= arr_data[['hour', 'minute', 'second']]
array2 = pd.DataFrame(ar_t)

所需的输出如下所示:这里,[2019 11 9]是阵列-1的形状,以匹配第二个阵列的尺寸,然后是concat。但是,在重塑的情况下,我每次都需要检查第二个数组的尺寸。因此,我需要一个自动脚本,它可以处理不相等的数组

Array-1:第一个数组始终具有相同的维度

        year  month  day
     0  2019     11    9

Array-2:可变维度列是固定的,但每次迭代行都会更改:

    hour  minute  second
0     14      57   41.80
1     14      58    3.47
2     14      57   25.99
3     14      57   37.00
4     14      57   29.86
5     14      57   40.24
6     14      57   32.61
7     14      57   42.26
8     14      57   29.74
9     14      57   42.36
10    14      57   46.00
11    14      58    8.69
12    14      57   34.50
13    14      57   48.97
14    14      57   30.30
15    14      57   39.78
16    14      57   32.45
17    14      57   47.83
18    14      57   25.86
19    14      57   36.30
20    14      57   17.90
21    14      57   23.40
22    14      57   34.64
23    14      57   50.95
24    14      57   35.90
25    14      57   50.64

所需输出:

  Year  month  day  hour  minute  second
0   2019     11    9    14      57   41.80
1   2019     11    9    14      58    3.47
2   2019     11    9    14      57   25.99
3   2019     11    9    14      57   37.00
4   2019     11    9    14      57   29.86
5   2019     11    9    14      57   40.24
6   2019     11    9    14      57   32.61
7   2019     11    9    14      57   42.26
8   2019     11    9    14      57   29.74
9   2019     11    9    14      57   42.36
10  2019     11    9    14      57   46.00
11  2019     11    9    14      58    8.69
12  2019     11    9    14      57   34.50
13  2019     11    9    14      57   48.97
14  2019     11    9    14      57   30.30
15  2019     11    9    14      57   39.78
16  2019     11    9    14      57   32.45
17  2019     11    9    14      57   47.83
18  2019     11    9    14      57   25.86
19  2019     11    9    14      57   36.30
20  2019     11    9    14      57   17.90
21  2019     11    9    14      57   23.40
22  2019     11    9    14      57   34.64
23  2019     11    9    14      57   50.95
24  2019     11    9    14      57   35.90
25  2019     11    9    14      57   50.64

Tags: csvtxtreadnames数组yearseppd
3条回答

这对我很有用:

import numpy as np

arr1=[2019, 12, 17]
arr2=[12, 34, 17,
      18, 17, 36, 
      15, 23, 40]

print(arr1,arr2)

输出:

[2019, 12, 17] [12, 34, 17, 18, 17, 36, 15, 23, 40]
arr2 = np.array(arr2).reshape((3,3))
arr1 = np.array([arr1,]*3)
newArray = np.hstack((arr1,arr2))

输出:

 array([[2019,   12,   17,   12,   34,   17],
       [2019,   12,   17,   18,   17,   36],
       [2019,   12,   17,   15,   23,   40]])

更新,为了提高大型数据集的性能,只需在重新调整阵列形状后堆叠新值:

arr1=[2019, 12, 17]
newEntry = [1,2,3]
nE = np.hstack((arr1,newEntry))
np.vstack((newArray,nE))

输出:

array([[2019,   12,   17,   12,   34,   17],
       [2019,   12,   17,   18,   17,   36],
       [2019,   12,   17,   15,   23,   40],
       [2019,   12,   17,    1,    2,    3]])

更新在不了解exakt维度的情况下,您只需使用:

np.arange(arr2).reshape(-1, 3)

您可以使用numpy.column_stack

np.column_stack((array_1, array_2))

a
#array([[0, 1, 2],
#       [3, 4, 5]])

b
#array([0, 1])

np.column_stack((a, b))
#array([[0, 1, 2, 0],
#       [3, 4, 5, 1]])

将常量值分配给数据帧列

如果第一个数组始终是单行数据帧或一维数组,则可以使用pandas为列指定一个常量值

语法是my_dataframe["new_column"] = constant_value

因为arr1是一个数据帧,访问一个列将给我们一个系列。为了得到它的常量值,我们需要将单元格中的值索引为0-或第一行

在您的情况下,这将成为:

>>> type(arr1), type(arr2)
(pandas.core.frame.DataFrame, pandas.core.frame.DataFrame)
>>> arr2["year"] = arr1["year"].loc[0]
>>> arr2["month"] = arr1["month"].loc[0]
>>> arr2["day"] = arr1["day"].loc[0]
>>> arr2
    hours  minutes    seconds  year  month  day
0       9        6  22.001464  2019     11    9
1       8       21  28.412044  2019     11    9
2      10        7  22.433552  2019     11    9
3      18       37  19.551359  2019     11    9
4      19        1  40.722019  2019     11    9
..    ...      ...        ...   ...    ...  ...
95      2       16  48.368643  2019     11    9
96     19       22  25.034936  2019     11    9
97     10        0  20.163870  2019     11    9
98     16       35  27.251357  2019     11    9
99      8       26  54.200897  2019     11    9

请记住,修改arr2对象将在适当的位置工作

访问数据帧后面的numpy阵列

如果需要多维数组,只需调用:

>>> arr2_np = arr2.to_numpy()

根据您的用例对列进行排序

如果需要对列进行排序,您可以对它们进行不同的查看,如下所示:

>>> cols = arr2.columns.to_list()
>>> cols2 = cols[3:] + cols[:3]
>>> arr2[cols2] 
    year  month  day  hours  minutes    seconds
0   2019     11    9      9        6  22.001464
1   2019     11    9      8       21  28.412044
2   2019     11    9     10        7  22.433552
3   2019     11    9     18       37  19.551359
4   2019     11    9     19        1  40.722019
..   ...    ...  ...    ...      ...        ...
95  2019     11    9      2       16  48.368643
96  2019     11    9     19       22  25.034936
97  2019     11    9     10        0  20.163870
98  2019     11    9     16       35  27.251357
99  2019     11    9      8       26  54.200897

相关问题 更多 >