我正在使用熊猫处理以空格分隔的数字数据文件。有些文件带有标题行,有些则没有。 Pandas通过允许 int,int列表,默认'infer'的标头值来处理此问题,而 None 没有标头。我希望在命令行中解析此信息,如:
python myscript file.txt -Header None
这是我尝试过的:
parser.add_argument("-Header",
help="specify whether the data have headers",
args+, type=str, default=['None'])
args = parser.parse_args()
然后,我要检查是否传递了 int,int列表或 None :
if args.Header[0] != 'None':
Header = [int(item) for item in args.Header[0].split(',')]
else:
Header = None
然后我读取了数据
df = pd.read_table(data_file, comment = "#", header=Header) # read data
但是,我似乎无法正确传递“无”或“推断”。传递标头0确实可以,但是当然第一行被视为标头而不是数据。
编辑:
看来我的问题不在于arg_parse,而是当/不存在标头时,熊猫如何索引数据。我的标题类型错误:
result = self.index.get_value(self, key)
我会尽力解决这个问题。
答案 0 :(得分:0)
如果未传递名称,则其行为与header = 0相同,并且从文件的第一行推断出列名称,如果显式传递了列名称,则其行为与header = None相同。
我会说pd.read_table
并不是按照您打算的方式使用的。因此,我建议使用if语句将调用分为两个版本。
if header is None:
df = pd.read_table(data_file, comment = "#")
else:
df = pd.read_table(data_file, comment = "#", header=Header)