为什么熊猫df.add_suffix()无法与for循环一起使用

时间:2020-03-27 12:00:32

标签: python pandas for-loop suffix

我正在尝试将熊猫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”。

有人知道我在这里想念的吗?

3 个答案:

答案 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; } } } 的值,但是ii元素并不相同,当您使用mylist循环进行迭代时,您正在分配到for中变量i的连续元素上,您应该使用列表索引来更改元素:

mylist