pandas的赋值问题。

新手上路,请多包涵

我有一个Excel表格,然后通过pandas的read_excel()方法读进程序,命名为df

然后我想对这个表格每一行进行处理,如果符合条件的话,就把这一行添加到一个新的名为df1的变量中,现在考虑一个简单的问题,抛开循环来讲,如果只考虑每一次循环中的赋值或者是append操作,应当如何实现?

我的第一个想法是用赋值的

df1.loc[0] = df.loc[0]

这样带来的一个问题是:print df1之后发现他第一行(第0行)的数据全是nan
而如果我在这之前print df.loc[0],结果并不是nan,也就是说df.loc[0]是有的

如果我用append方法呢?

df1 = df1.append(df.loc[0])

则会报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)
大意是说编码不符

所以我的问题是:如何把一个从Excel文件中读到的DataFrame的某一行“传递”给一个新的变量

阅读 10k
3 个回答

先定义一个DataFrame变量,然后append

import pandas as pd
df = pd.read_excel(data)
df1 = pd.Dataframe()
df1.append(df.loc[1])

我不知道你是怎么做到直接不先初始化一个DataFrame变量直接索引赋值的。。。

听上去你貌似想做一个filter

In [1]: import numpy as np

In [2]: import pandas as pd

In [3]: df = pd.DataFrame(np.random.randint(0, 10, size=(5,4)), columns=list('ABCD'))

In [4]: df
Out[4]:
   A  B  C  D
0  5  5  6  5
1  5  5  0  6
2  1  2  5  4
3  8  1  7  9
4  5  8  4  2

In [5]: df[df.apply(lambda i: i['A'] < 5, axis=1)]
Out[5]:
   A  B  C  D
2  1  2  5  4

这里我用的条件是A列的值小于5。

而且那个编码错误貌似是你其他code的问题...

read_excel('xxx.xls',encoding = 'utf8')应该能避免那种中文编码错误

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏