Как объединить несколько фреймов данных панд одинакового размера в одну связную базу данных?

<\s*(\w+)[^/>]*>

Объясненные детали:

<: начальный символ

\s*: он может иметь пробелы перед именем тега (уродливым, но возможным).

(\w+): теги могут содержать буквы и цифры (h1). Ну, \w также соответствует «_», но это не мешает, я думаю. Если любопытное использование ([a-zA-Z0-9] +).

[^/>]*: все, кроме > и /, до закрытия >

>: закрытие >

UNRELATED

И для парней, которые недооценивают регулярные выражения, говоря, что они только настолько сильны, как обычные языки:

anbanban, который не является регулярный и даже контекстно-свободный, можно сопоставить с ^(a+)b\1b\1$

Обратное обращение FTW !

2
задан Troy Zaremba 17 January 2019 в 15:31
поделиться

3 ответа

Обратитесь к

pd.concat([df1,df2],1).groupby(level=0,axis=1).agg(lambda x : x.values.tolist())
Out[529]: 
        1       2       3       4
1  [A, A]  [B, D]  [C, G]  [D, J]
2  [A, B]  [B, E]  [C, H]  [D, K]
3  [A, C]  [B, F]  [C, I]  [D, L]

. Если бы я был вами, я бы посмотрел на несколько индексов, а не на столбцы типа списка

pd.concat([df1,df2],1,keys=[1,2])
Out[530]: 
   1           2         
   1  2  3  4  1  2  3  4
1  A  B  C  D  A  D  G  J
2  A  B  C  D  B  E  H  K
3  A  B  C  D  C  F  I  L
.
0
ответ дан Wen-Ben 17 January 2019 в 15:31
поделиться

Вы можете добавить значения из обоих фреймов данных, а также разделитель между ними, и перебирать столбцы, используя str.split для создания списков. Наконец, используйте pd.concat , чтобы превратить результат в информационный кадр:

df = df1 + ',' + df2
pd.concat([df[col].str.split(',') for col in df.columns], axis=1)

     1       2       3       4
1  [A, A]  [B, D]  [C, G]  [D, J]
2  [A, B]  [B, E]  [C, H]  [D, K]
3  [A, C]  [B, F]  [C, I]  [D, L]

Или используя DataFrame.combine :

df1.combine(df2, func=lambda a,b: (a + ',' + b).str.split(','))

     1       2       3       4
1  [A, A]  [B, D]  [C, G]  [D, J]
2  [A, B]  [B, E]  [C, H]  [D, K]
3  [A, C]  [B, F]  [C, I]  [D, L]
0
ответ дан yatu 17 January 2019 в 15:31
поделиться

Не очень эффективно, но вы можете преобразовать все ячейки в списки, а затем просто добавить кадры данных следующим образом:

import pandas as pd
import numpy as np
np.random.seed(42)

df1 = pd.DataFrame(
    [list('ABCD') for _ in range(5)]
)
df2 = pd.DataFrame(
    [np.random.choice(list('ABCD'), size=4).tolist() for _ in range(5)]
)

df1 = df1.apply(lambda x: [[v] for v in x])
df2 = df2.apply(lambda x: [[v] for v in x])

df1 + df2

, который выводит

        0       1       2       3
0  [A, C]  [B, D]  [C, A]  [D, C]
1  [A, C]  [B, D]  [C, A]  [D, A]
2  [A, C]  [B, B]  [C, C]  [D, C]
3  [A, C]  [B, C]  [C, D]  [D, A]
4  [A, D]  [B, D]  [C, D]  [D, C]
0
ответ дан displayname 17 January 2019 в 15:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: