我正在尝试将熊猫df.add_suffix()
用于多个数据帧,这些数据帧通过for循环存储在列表中:
df_1 = pd.DataFrame({'X': [2, 3, 4, 5], 'Y': [4, 5, 6, 7]})
df_2 = pd.DataFrame({'X': [6, 7, 8, 9], 'Y': [9, 8, 7, 6]})
df_3 = pd.DataFrame({'X': [6, 3, 1, 13], 'Y': [7, 0, 1, 4]})
mylist = [df_1, df_2, df_3]
for i in mylist:
i = i.add_suffix('_test')
但是,当我随后打印数据框时,仍然看到旧的列名称“ X”和“ Y”。
分别对每个数据帧执行相同操作时:
df1 = df_1.add_suffix('_test')
一切正常,我得到列名称“ X_test”和“ Y_test”。
有人知道我在这里想念的吗?
答案 0 :(得分:0)
输出的问题是没有分配回列表,因此没有更改。
如果要分配给与DataFrame
相同的enumerate
列表以进行索引的解决方案:
for j,i in enumerate(mylist):
mylist[j] = i.add_suffix('_test')
print (mylist)
[ X_test Y_test
0 2 4
1 3 5
2 4 6
3 5 7, X_test Y_test
0 6 9
1 7 8
2 8 7
3 9 6, X_test Y_test
0 6 7
1 3 0
2 1 1
3 13 4]
或者,如果要使用DataFrame
的新列表,请使用列表理解:
dfs = [i.add_suffix('_test') for i in mylist]
print (dfs)
[ X_test Y_test
0 2 4
1 3 5
2 4 6
3 5 7, X_test Y_test
0 6 9
1 7 8
2 8 7
3 9 6, X_test Y_test
0 6 7
1 3 0
2 1 1
3 13 4]
答案 1 :(得分:0)
df_1 = pd.DataFrame({'X': [2, 3, 4, 5], 'Y': [4, 5, 6, 7]})
df_2 = pd.DataFrame({'X': [6, 7, 8, 9], 'Y': [9, 8, 7, 6]})
df_3 = pd.DataFrame({'X': [6, 3, 1, 13], 'Y': [7, 0, 1, 4]})
mylist = [df_1, df_2, df_3]
for i,j in enumerate(mylist):
mylist[i] = j.add_suffix('_test')
更新后的dfs在列表(我的列表)中,而不是原始列表中。
答案 2 :(得分:0)
您正在更改变量public class NumberProducer implements Runnable {
private final Random random = new Random();
private final ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
@Inject
private ConnectionFactoryProducer cf;
private ConnectionFactory c;
void onStart(@Observes StartupEvent ev) throws JMSException {
c=cf.connectionFactory();
scheduler.scheduleWithFixedDelay(this, 0L, 1L, TimeUnit.SECONDS);
}
void onStop(@Observes ShutdownEvent ev) {
scheduler.shutdown();
}
@Override
public void run() {
JMSContext context = c.createContext();
Queue destination=context.createQueue("queue:///DEV.QUEUE.1");
try {
TextMessage message = context.createTextMessage(String.format("Value : %d", random.nextInt(100)));
JMSProducer producer = context.createProducer();
producer.send(destination, message);
System.out.println(message);
} catch (Exception e) {
throw e;
}
}
}
的值,但是i
与i
元素并不相同,当您使用mylist
循环进行迭代时,您正在分配到for
中变量i
的连续元素上,您应该使用列表索引来更改元素:
mylist