【问题标题】:CSV file gets lost between Python function callsCSV 文件在 Python 函数调用之间丢失
【发布时间】:2017-11-22 06:21:02
【问题描述】:

我正在编写一个脚本,在其中绘制一个熊猫数据框。我首先在特定 Python 模块的一个文件中预处理数据。然后我从模块中导入该函数。当我在新的 Python 文件中调用该函数时,它认为数据框是 None 类型的对象,而在原始函数中它会正确打印数据框。

这是我的代码:

import numpy as np
import matplotlib.pyplot as plt
import os
from Preprocessing import sample_difference as sd

files = [
    'PickUpPhoneAccelerometer1.csv',
    'PickUpPhoneAccelerometer2.csv',
    'PickUpPhoneAccelerometer3.csv',
    'Wave1Accelerometer.csv',
    'Wave2Accelerometer.csv',
    'Wave3Accelerometer.csv'
]


def segment_energy(data, th):
    print data
    mag = np.array([np.linalg.norm(data['x']), np.linalg.norm(data['y']), np.linalg.norm(data['z'])])

运行这个,数据是None

这是另一个 Python 文件 sample_difference

 def sample_difference(filename):
     df = pd.read_csv(filename, header=None, names=['timestamp', 'time skipped', 'x', 'y', 'z', 'label']).set_index('timestamp')
     df.assign(dx=df.x.diff(), dy=df.y.diff(), dz=df.z.diff())
     print df

这会正确打印出数据框。我运行最终脚本时的错误是:

line 17, in segment_energy
mag = np.array([np.linalg.norm(data['x']), np.linalg.norm(data['y']), np.linalg.norm(data['z'])])
TypeError: 'NoneType' object has no attribute '__getitem__'

我在同一个文件中调用segment_energy

for f in files:
    with open(os.path.join("/Users", "myname", "PycharmProjects", "sensorLogProject", "Data", f), 'rU') as my_file:
        segment_energy(sd.sample_difference(my_file), 2)

【问题讨论】:

    标签: python csv pandas dataframe nonetype


    【解决方案1】:

    首先,您需要使用文件名而不是文件对象调用sample_difference 函数:

    for f in files:
        filename = os.path.join("/Users", "myname", "PycharmProjects", "sensorLogProject", "Data", f)
        segment_energy(sd.sample_difference(filename), 2)
    

    其次,sample_difference 函数应该返回数据帧而不是打印:

    def sample_difference(filename):
         df = pd.read_csv(filename, header=None, names=['timestamp', 'time skipped', 'x', 'y', 'z', 'label']).set_index('timestamp')
         df.assign(dx=df.x.diff(), dy=df.y.diff(), dz=df.z.diff())
         return df
    

    【讨论】:

    • 第二次更改解决了错误,但第一次更改导致更多错误。这可能与我访问文件的方式有关,但我会保持不变。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-21
    • 2010-12-22
    • 1970-01-01
    • 1970-01-01
    • 2021-03-06
    • 1970-01-01
    • 2019-01-12
    相关资源
    最近更新 更多