【问题标题】:Python DataFrame Data Analysis of Large Amount of Data from a Text File文本文件中大量数据的 Python DataFrame 数据分析
【发布时间】:2020-08-18 04:12:03
【问题描述】:

我有以下代码:

datadicts = [ ]
with open("input.txt") as f:
    for line in f:
        datadicts.append({'col1': line[':'], 'col2': line[':'], 'col3': line[':'], 'col4': line[':']})

df = pd.DataFrame(datadicts)
df = df.drop([0])
print(df)

我正在使用文本文件(未格式化)从中提取数据块。打开文本文件时,它看起来像这样,除了规模更大:

00 2381    1.3 3.4 1.8 265879 Name 
34 7879    7.6 4.2 2.1 254789 Name 
45 65824   2.3 3.4 1.8 265879 Name 
58 3450    1.3 3.4 1.8 183713 Name 
69 37495   1.3 3.4 1.8 137632 Name 
73 458913  1.3 3.4 1.8 138024 Name 

以下是我在处理这些数据时遇到的问题:

  1. 我只需要第二、三、六、七列数据。这个问题,我相信我已经通过阅读各个行并创建一个包含必要列的数据框来解决上面的代码。如果有人有更好的方法,我愿意接受建议。
  2. 我需要跳过第一行数据。这个,开放的特征没有skirows属性,所以当我删除第一行时,我也失去了从0开始的索引。有什么办法解决这个问题吗?
  3. 我需要生成的数据框看起来像一个干净整洁的数据框。截至目前,它看起来像这样:
Col1   Col2   Col3 Col4
2381    3.4 265879 Name 
7879    4.2 254789 Name 
65824   3.4 265879 Name 
3450    3.4 183713 Name 
37495   3.4 137632 Name 
458913  3.4 138024 Name 

列下的所有内容都右对齐,看起来很奇怪。任何想法如何解决这个问题?

  1. 我还需要能够对数据的列进行统计分析,并且能够找到具有最高数据和最低数据的名称,但是由于某种原因,我总是会出错,因为我认为,即使我已将所有数据设置为数据框,但数据框内的值读取为对象,而不是整数、字符串、浮点数等。

所以,如果我的数据无法使用 Python 函数进行分析,有谁知道我该如何解决这个问题以使数据能够正确运行?

任何帮助将不胜感激。我希望我已经清楚地列出了我所有的需求。我是 Python 新手,我不确定我是否使用了所有正确的术语。

【问题讨论】:

  • 你试过'pd.read_csv'功能吗?在这里可能非常有用。
  • 正如@S3DEV 提到的,read_csv 在这里应该做得很好,您可以尝试将其用作-df = pd.read_csv("input.txt", sep=' ', skipinitialspace=True, names=['col1', 'col2', 'col3', 'col4', 'col5', 'col6', 'col7'])
  • 一开始我确实尝试过使用 pd.read_csv,但我遇到了一个问题,即我无法从文件中获取需要导入的数据,因为该文件不是由单个列格式化的。这只是一行一行的数据。所以我必须使用循环函数从每一行中指定我需要哪些部分。
  • @Rose16 所以基本上,没有提供您可以轻松过滤掉的列名?你试过我上面建议的代码吗?

标签: python pandas dataframe


【解决方案1】:

您可以使用pandas.read_csv() 函数非常轻松地完成此操作

  • txt2pd.txt 是一个文本文件,其中包含来自您上面的源代码的复制/粘贴
  • sep 正在使用正则表达式模式以一个或多个连续空格分隔
  • names 使用 list 创建列名
  • skiprows 根据您的要求跳过第一行

示例:

keep = ['col1', 'col3', 'col5', 'col6']
df = pd.read_csv('txt2pd.txt', 
                 sep='\s+', 
                 names=['col0', 'col1', 'col2', 'col3', 'col4', 'col5', 'col6'], 
                 skiprows=1)
df = df[keep]

输出:

     col1  col3    col5  col6
0    7879   4.2  254789  Name
1   65824   3.4  265879  Name
2    3450   3.4  183713  Name
3   37495   3.4  137632  Name
4  458913   3.4  138024  Name

样本分析:

使用df.describe(),您可以输出简单的高级分析。 (任何进一步的问题都应该是一个新问题的主题。)

                col1      col3           col5
count       5.000000  5.000000       5.000000
mean   114712.200000  3.560000  196007.400000
std    194048.545838  0.357771   61762.106621
min      3450.000000  3.400000  137632.000000
25%      7879.000000  3.400000  138024.000000
50%     37495.000000  3.400000  183713.000000
75%     65824.000000  3.400000  254789.000000
max    458913.000000  4.200000  265879.000000

【讨论】:

  • 非常感谢您的帮助!
  • 我的代码终于可以顺利运行了!我赞成你的回答!抱歉,我是这个平台的新手。
  • 我会接受这个答案。有机会,你能帮我解决我的另一个问题吗? stackoverflow.com/questions/61687406/…
  • 谢谢。是的当然。如果可以的话,我会在星期一进行更深入的研究。
  • 没关系。几个小时后到期,这是我错过的最后一件事。不用担心!感谢您的所有帮助!
猜你喜欢
  • 2019-03-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-16
  • 2012-11-01
  • 1970-01-01
  • 2021-05-13
相关资源
最近更新 更多