【发布时间】:2018-04-29 09:26:30
【问题描述】:
我正在使用 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
main 函数的解释如下,根据我传递给 load_data 函数的参数,您必须以一种或另一种方式从我的 .csv 文件中加载数据。
这些是可能的参数和它们开发的功能:
- inputFile:包含数据的 csv 文件的名称。
- 分隔符:分隔数据的字符。默认情况下,该函数必须使用逗号字符 (",")。
- nan:将被视为缺失值的字符串列表。此列表中的字符串之一在输入文件中的任何出现都将被解释为 NaN 。默认值为无。
- header:一个布尔标志,将指示文件是否包含标头 (True) 或不包含标头 (False)。默认情况下它必须是 True 。
- varNames:* Strings * 列表,仅在 header 为有效 False 的情况下用作变量名。默认值为 None 。
- pref:一个字符串,仅在 header 为有效 False 且列表尚未定义 * varNames 的情况下用作变量名称的前缀。例如,如果 pref = "x",则变量的名称将为 "x0"、"x1"、"x2" 等。默认值为 "var_"。
我的 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 函数传递的“前缀”选项,所以我仍然尝试过,但它没有正确执行。
这是我的结果,如您所见,尽管我将前缀参数传递给 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
另外一个疑问是,由于我正在计算必须分配给列的数值,因此我会修改已经生成的数据框,我认为这不是最佳的形式来实现它。
【问题讨论】:
-
这是一大堆文字,所以我再问一次。你的问题是什么,你哪里出错了?
-
看 load_function,我必须在我的数字列示例中添加前缀,但该函数无法正常工作,在这种情况下,在主函数上我传递了“col_”,但这没有添加到名称中要显示的列数,而不是 0 1 2 ... as col1 col2 col3 ...
-
我无法重现您的问题,但如果您看到我的回答,我可以为您提供解决方法。
标签: python pandas csv dataframe