@@ -1069,22 +1069,35 @@ def transform(self, func, *args, **kwargs):
1069
1069
axis = self .axis )
1070
1070
1071
1071
def _concat_frames (frames , index , columns = None , axis = 0 ):
1072
- if axis == 0 :
1073
- all_index = [np .asarray (x .index ) for x in frames ]
1074
- new_index = Index (np .concatenate (all_index ))
1072
+ if len (frames ) == 1 :
1073
+ return frames [0 ]
1075
1074
1075
+ if axis == 0 :
1076
+ new_index = _concat_indexes ([x .index for x in frames ])
1076
1077
if columns is None :
1077
1078
new_columns = frames [0 ].columns
1078
1079
else :
1079
1080
new_columns = columns
1080
1081
else :
1081
- all_columns = [np .asarray (x .columns ) for x in frames ]
1082
- new_columns = Index (np .concatenate (all_columns ))
1082
+ new_columns = _concat_indexes ([x .columns for x in frames ])
1083
1083
new_index = index
1084
1084
1085
- new_values = np .concatenate ([x .values for x in frames ], axis = axis )
1086
- result = DataFrame (new_values , index = new_index , columns = new_columns )
1087
- return result .reindex (index = index , columns = columns )
1085
+ if frames [0 ]._is_mixed_type :
1086
+ new_data = {}
1087
+ for col in new_columns :
1088
+ new_data [col ] = np .concatenate ([x [col ].values for x in frames ])
1089
+ return DataFrame (new_data , index = new_index , columns = new_columns )
1090
+ else :
1091
+ new_values = np .concatenate ([x .values for x in frames ], axis = axis )
1092
+ result = DataFrame (new_values , index = new_index , columns = new_columns )
1093
+ return result .reindex (index = index , columns = columns )
1094
+
1095
+ def _concat_indexes (indexes ):
1096
+ if len (indexes ) == 1 :
1097
+ new_index = indexes [0 ]
1098
+ else :
1099
+ new_index = indexes [0 ].append (indexes [1 :])
1100
+ return new_index
1088
1101
1089
1102
def _concat_frames_hierarchical (frames , keys , groupings , axis = 0 ):
1090
1103
if axis == 0 :
@@ -1096,8 +1109,14 @@ def _concat_frames_hierarchical(frames, keys, groupings, axis=0):
1096
1109
new_columns = _make_concat_multiindex (all_columns , keys , groupings )
1097
1110
new_index = frames [0 ].index
1098
1111
1099
- new_values = np .concatenate ([x .values for x in frames ], axis = axis )
1100
- return DataFrame (new_values , index = new_index , columns = new_columns )
1112
+ if frames [0 ]._is_mixed_type :
1113
+ new_data = {}
1114
+ for col in new_columns :
1115
+ new_data [col ] = np .concatenate ([x [col ].values for x in frames ])
1116
+ return DataFrame (new_data , index = new_index , columns = new_columns )
1117
+ else :
1118
+ new_values = np .concatenate ([x .values for x in frames ], axis = axis )
1119
+ return DataFrame (new_values , index = new_index , columns = new_columns )
1101
1120
1102
1121
def _make_concat_multiindex (indexes , keys , groupings ):
1103
1122
if not _all_indexes_same (indexes ):
0 commit comments