我正在使用pandas库制作一个简单的程序。
首先,我有一个名为small.csv的.csv文件,其中包含以下结构。
1,4.0,?,?,none,?
2,2.0,3.0,?,none,38
2,2.5,2.5,?,tc,39
在我的主要功能上,我有以下代码:
def main():
# my code here
fname = "/home/sergio/PycharmProjects/practica2/small.csv"
sep = ","
vars = ["x1", "x2", "x3", "x4", "x5", "x6"]
na_values = ["?", "none"]
prefix = "col_"
df = da.load_data(fname, delimiter=sep, nan=na_values,
header=False, pref=prefix)
print df
主函数的解释如下,根据我传递给load_data函数的参数,您必须以某种方式从我的.csv文件加载数据。
这些是可能的论据及其发展的功能:
我的load_data函数:
def load_data(inputFile, delimiter=",", nan=None, header=True,
varNames=None, pref="var_"):
data = DataFrame()
if header == False:
if not varNames:
print "header=false and varNames not defined"
data = pd.read_csv(inputFile, sep=delimiter, na_values=nan, prefix=pref, header=None)
listaNum = list(range(len(data.columns)))
data.columns = listaNum
else: # varNames defined
data = pd.read_csv(inputFile, sep=delimiter, na_values=nan, prefix=pref)
else:
return data
此功能负责根据我们输入的参数显示数据,根据情况改变输出
我必须评估的一个案例如下。
如果header = False,并且变量varsNames(表示列名称未传递给该函数(Null)),我必须将0中的数值赋给具有的列数,即0 1 2 ......最多列。
同样在这种情况下,我必须添加我们传递给定义列的那个数字的前缀,在这种情况下它将是“col _”。
结果如下:
col_0 col_1 col_2 col_3 col_4 col_5
0 1 4.0 NaN NaN NaN NaN
1 2 2.0 3.0 NaN NaN 38.0
2 2 2.5 2.5 NaN tc 39.0
这是我的问题,在我评论过的情况下我们必须为每个数字列添加一个前缀,带有变量前缀,我可以手工完成,也就是说,我的每个元素都可以列列表,添加字符串“col _”。
但是我认为这是错误的,因为我没有使用可以通过read_csv函数传递的“prefix”选项,但我已经尝试了它并且它没有正确地执行它。
这是我的结果,正如您所看到的,虽然我将前缀参数传递给read_csv函数,但它会忽略它。
0 1 2 3 4 5
0 1 4.0 NaN NaN NaN NaN
1 2 2.0 3.0 NaN NaN 38.0
2 2 2.5 2.5 NaN tc 39.0
另外一个疑问是,因为我正在计算我必须分配给列的数值,所以我会修改已经生成的数据帧,我相信它不是最优的形成实现它。
答案 0 :(得分:2)
这适用于我v0.21
。
import io
text = \
'''1,4.0,?,?,none,?
2,2.0,3.0,?,none,38
2,2.5,2.5,?,tc,39'''
buf = io.StringIO(text)
df = pd.read_csv(buf, na_values=['?', 'none'], header=None, prefix='col_')
df
col_0 col_1 col_2 col_3 col_4 col_5
0 1 4.0 NaN NaN NaN NaN
1 2 2.0 3.0 NaN NaN 38.0
2 2 2.5 2.5 NaN tc 39.0
另一个技巧(如果仍然不起作用)将使用add_prefix
:
df
0 1 2 3 4 5
0 1 4.0 NaN NaN NaN NaN
1 2 2.0 3.0 NaN NaN 38.0
2 2 2.5 2.5 NaN tc 39.0
df = df.add_prefix('col_')
df
col_0 col_1 col_2 col_3 col_4 col_5
0 1 4.0 NaN NaN NaN NaN
1 2 2.0 3.0 NaN NaN 38.0
2 2 2.5 2.5 NaN tc 39.0