我正在努力与熊猫一起获得以下结果。你能帮我解决这个问题吗?
这是一个代码:
@Bean
public Map<String, Object> consumerConfigs() {
Map<String, Object> props = new HashMap<>();
props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,
bootstrapServers);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,
StringDeserializer.class);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,
StringDeserializer.class);
props.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG, "earliest");
props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, true);
props.put(ConsumerConfig.ISOLATION_LEVEL_CONFIG,
"read_committed");
props.put(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG, 10000);
props.put(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG, 30000);
props.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG,
maxpollRecords);
return props;
}
@Bean
public ConsumerFactory<Object, Object> consumerFactory() {
return new DefaultKafkaConsumerFactory<>(consumerConfigs());
}
/**
* Batch Listener */
@Bean
@Primary
public ConcurrentKafkaListenerContainerFactory<Object, Object>
kafkaListenerContainerFactoryBatch (
ConcurrentKafkaListenerContainerFactoryConfigurer configurer,
ConsumerFactory<Object, Object> kafkaConsumerFactory,
KafkaOperations<? extends Object, ? extends Object> template ) {
ConcurrentKafkaListenerContainerFactory<Object, Object>
factory = new ConcurrentKafkaListenerContainerFactory<>();
configurer.configure(factory, consumerFactory());
factory.setBatchListener(true);
factory.getContainerProperties().setAckMode(AckMode.MANUAL);
DeadLetterPublishingRecoverer recoverer = new
DeadLetterPublishingRecoverer(template);
ExponentialBackOff fbo = new ExponentialBackOff();
fbo.setMaxElapsedTime(maxElapsedTime);
fbo.setInitialInterval(initialInterval);
fbo.setMultiplier(multiplier);
RecoveringBatchErrorHandler errorHandler = new
RecoveringBatchErrorHandler(recoverer, fbo);
factory.setBatchErrorHandler(errorHandler);
factory.setConcurrency(setConcurrency);
return factory;
}
我得到了什么。
response =[{'type': 'heartrate',
'data': [27, 32, 35, 31, 29, 30],
'education': 'bachelor',
'salary': 80000}].
df = pd.DataFrame(response)
我想要达到的目标:
type data education salary
0 heartrate [27, 32, 35, 31, 29, 30] bachelor 80000
注意:我发现如果我去掉方括号它会起作用,但这实际上是 api 响应,因此无法修改原始数据。
答案 0 :(得分:0)
给你:
response ={'type': ['heartrate' for _ in range(6)],
'data': [27, 32, 35, 31, 29, 30],
'education': ['bachelor' for _ in range(6)],
'salary': [80000 for _ in range(6)]}
df = pd.DataFrame(response)
答案 1 :(得分:0)
然后只需在 data
列上分解数据框,ignore_index
为 True
>>> df.explode('data', ignore_index=True)
type data education salary
0 heartrate 27 bachelor 80000
1 heartrate 32 bachelor 80000
2 heartrate 35 bachelor 80000
3 heartrate 31 bachelor 80000
4 heartrate 29 bachelor 80000
5 heartrate 30 bachelor 80000