python - 不理解 Pandas.Series.from_csv() 的输出

标签 python pandas dataframe

我有三个包含数据的txt文件,4列数字。我需要将它们加载到一个数据框(维度[3,n],其中n是列的长度)。因为我只需要每个文件中的一列我决定使用 Series.from_csv() 函数,但我无法理解输出。 我写了这段代码:

names = glob.glob("*.txt")
for i in names:
    rank = pd.Series.from_csv(i,sep=" ",index_col = 3)
    print rank

这会打印我的一列数据(这很好),但也会打印一列充满零的数据,如下所示:

0.039157    0
0.039001    0
0.038524    0
0.038579    0
0.038385    0

我发现更奇怪的是当我使用

rank = pd.Series.from_csv(i,sep=" ",index_col = 3).values

我得到了这个:

[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]
[0 0 0 ..., 0 0 0]

那么这意味着这个零是从文件读取的值?那么之前的第一列是什么?我尝试了很多方法,但我无法理解这一点。

最佳答案

我认为你可以使用更常见的read_csv使用 delim_whitespace=Trueusecols 用于过滤列,首先将所有 DataFrames 附加到 list dfs,然后使用 concat :

dfs = []
names = glob.glob("*.txt")
for i in names:
    rank = pd.read_csv(i,delim_whitespace=True,usecols=[3])
    print rank
    dfs.append(rank)

df = pd.concat(dfs, axis=1)

或者使用 sep='\s+' - 分隔符是任意空格:

dfs = []
names = glob.glob("*.txt")
for i in names:
    rank = pd.read_csv(i,sep='\s+',usecols=[3])
    print rank
    dfs.append(rank)

df = pd.concat(dfs, axis=1)

您还可以使用列表理解:

files = glob.glob("*.txt")
dfs = [pd.read_csv(fp, delim_whitespace=True,usecols=[3]) for fp in files]
df = pd.concat(dfs, axis=1) 

关于python - 不理解 Pandas.Series.from_csv() 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40692591/

相关文章:

python-3.x - 重命名列正则表达式,如果不匹配则保留名称

python - 找到 3 个 DataFrame 之间的共同值?

r - 使用非连续行号的子集数据

python - 如何根据 Pandas 数据框中的两个或多个子集标准删除重复项

python - psutil 的构建轮失败

python - 在python中打开二进制数据

python - 使用 py.test 打印测试执行时间并锁定慢速测试

python - 如何在Python中计算stdin的用户输入数量

Python/Pandas - 堆叠条上不同的标签颜色

python - 根据条件替换多列中的值