2017-01-12 6 views
12

У меня есть pandas DataFrame, который я написал из concat. Одна строка состоит из 96 значений, я хотел бы разделить DataFrame со значением 72.Pandas Split Dataframe в два Dataframes

Так что первые 72 значения строки хранятся в Dataframe1 и следующих 24 значениях строки в Dataframe2.

Я создаю мой DF следующим образом:

temps = DataFrame(myData) 
datasX = concat(
[temps.shift(72), temps.shift(71), temps.shift(70), temps.shift(69), temps.shift(68), temps.shift(67), 
temps.shift(66), temps.shift(65), temps.shift(64), temps.shift(63), temps.shift(62), temps.shift(61), 
temps.shift(60), temps.shift(59), temps.shift(58), temps.shift(57), temps.shift(56), temps.shift(55), 
temps.shift(54), temps.shift(53), temps.shift(52), temps.shift(51), temps.shift(50), temps.shift(49), 
temps.shift(48), temps.shift(47), temps.shift(46), temps.shift(45), temps.shift(44), temps.shift(43), 
temps.shift(42), temps.shift(41), temps.shift(40), temps.shift(39), temps.shift(38), temps.shift(37), 
temps.shift(36), temps.shift(35), temps.shift(34), temps.shift(33), temps.shift(32), temps.shift(31), 
temps.shift(30), temps.shift(29), temps.shift(28), temps.shift(27), temps.shift(26), temps.shift(25), 
temps.shift(24), temps.shift(23), temps.shift(22), temps.shift(21), temps.shift(20), temps.shift(19), 
temps.shift(18), temps.shift(17), temps.shift(16), temps.shift(15), temps.shift(14), temps.shift(13), 
temps.shift(12), temps.shift(11), temps.shift(10), temps.shift(9), temps.shift(8), temps.shift(7), 
temps.shift(6), temps.shift(5), temps.shift(4), temps.shift(3), temps.shift(2), temps.shift(1), temps, 
temps.shift(-1), temps.shift(-2), temps.shift(-3), temps.shift(-4), temps.shift(-5), temps.shift(-6), 
temps.shift(-7), temps.shift(-8), temps.shift(-9), temps.shift(-10), temps.shift(-11), temps.shift(-12), 
temps.shift(-13), temps.shift(-14), temps.shift(-15), temps.shift(-16), temps.shift(-17), temps.shift(-18), 
temps.shift(-19), temps.shift(-20), temps.shift(-21), temps.shift(-22), temps.shift(-23)], axis=1) 

Вопрос: Как можно разделить их? :)

ответ

15

использование iloc

df1 = datasX.iloc[:, :72] 
df2 = datasX.iloc[:, 72:] 
+0

@piRSquared, Если мне нужно выбирать строки, я могу просто использовать 'df1 = datasX [0:10]' и 'df2 = datasX [10:]'? Итак, это даст df1 с 10 строками и df2 с остальными? –

+1

@ i.n.n.m да. Тем не менее, мне лично не нравится использовать этот тип нарезки, потому что это запутывает. Я использую 'df [['col1', 'col2]]' для среза столбцов. Просто потому, что панды указывают на то, что «0: 10» являются позициями индекса, не оправдывает использование этого синтаксиса ... для меня. Это полностью мое мнение, и вы можете делать то, что вам нужно. Но я бы использовал 'df.iloc [: 10]' и 'df.iloc [10:]' – piRSquared

+0

@piRSquared. Я согласен на выбор столбцов, было бы здорово использовать то, как вы упомянули. Мой вопрос был для строк. Это относится также к выбору строк? –

14

использование np.split(..., axis=1):

Демо:

In [255]: df = pd.DataFrame(np.random.rand(5, 6), columns=list('abcdef')) 

In [256]: df 
Out[256]: 
      a   b   c   d   e   f 
0 0.823638 0.767999 0.460358 0.034578 0.592420 0.776803 
1 0.344320 0.754412 0.274944 0.545039 0.031752 0.784564 
2 0.238826 0.610893 0.861127 0.189441 0.294646 0.557034 
3 0.478562 0.571750 0.116209 0.534039 0.869545 0.855520 
4 0.130601 0.678583 0.157052 0.899672 0.093976 0.268974 

In [257]: dfs = np.split(df, [4], axis=1) 

In [258]: dfs[0] 
Out[258]: 
      a   b   c   d 
0 0.823638 0.767999 0.460358 0.034578 
1 0.344320 0.754412 0.274944 0.545039 
2 0.238826 0.610893 0.861127 0.189441 
3 0.478562 0.571750 0.116209 0.534039 
4 0.130601 0.678583 0.157052 0.899672 

In [259]: dfs[1] 
Out[259]: 
      e   f 
0 0.592420 0.776803 
1 0.031752 0.784564 
2 0.294646 0.557034 
3 0.869545 0.855520 
4 0.093976 0.268974 

np.split() довольно гибкий - разобьем оригинальный DF на 3 ДХ в столбцах с индексами [2,3]:

In [260]: dfs = np.split(df, [2,3], axis=1) 

In [261]: dfs[0] 
Out[261]: 
      a   b 
0 0.823638 0.767999 
1 0.344320 0.754412 
2 0.238826 0.610893 
3 0.478562 0.571750 
4 0.130601 0.678583 

In [262]: dfs[1] 
Out[262]: 
      c 
0 0.460358 
1 0.274944 
2 0.861127 
3 0.116209 
4 0.157052 

In [263]: dfs[2] 
Out[263]: 
      d   e   f 
0 0.034578 0.592420 0.776803 
1 0.545039 0.031752 0.784564 
2 0.189441 0.294646 0.557034 
3 0.534039 0.869545 0.855520 
4 0.899672 0.093976 0.268974 
+1

Спасибо за вашу помощь, теперь у меня есть iloc, и это сработало, но для будущего это приятно знать! :) –

Смежные вопросы